Package: libtool
Version: 1.5.26-1
Severity: normal
I've an automake/libtool project where I build a library. This library
uses pthread functions so it needs to be linked against (dynamic
library).
To find the flags to use to be linked against the libpthread, I use
the ACX_PTHREAD m4 macro (from the autoconf-archive package).
It finds that all is needed is the FLAGS "-pthread"
However, libtool invoque the g++ linker with the -nostdlib flags that
render the -pthread flags ignored.
How can this be avoided ?
(for now, I've disabled the ACX_MACRO on linux and used the hard coded
-lpthread flags but I do not find this really portable...)
Here is some examples to illustrate what I said:
The fact that libtool use add -nostdlib when it calls the real linker
(g++ here)
[EMAIL PROTECTED]:~/travail/Recherche/KAAPI/git/build$ /bin/sh ./libtool
--tag=CXX --mode=link g++ -g -O2 -version-info 0:0:0 -o libkaapi.la -rpath
/home/vdanjean/kaapi/lib utils/libkaapiutils.la kernel/libkaapicore.la
rfo/libkaapirfo.la dfg/libkaapidfg.la network/libkaapinet.la ws/libkaapiws.la
api-atha/libatha.la st/libkaapisched.la -pthread
rm -fr .libs/libkaapi.la .libs/libkaapi.lai .libs/libkaapi.so
.libs/libkaapi.so.0 .libs/libkaapi.so.0.0.0
g++ -shared -nostdlib /usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crti.o
/usr/lib/gcc/i486-linux-gnu/4.2.3/crtbeginS.o -Wl,--whole-archive
utils/.libs/libkaapiutils.a kernel/.libs/libkaapicore.a rfo/.libs/libkaapirfo.a
dfg/.libs/libkaapidfg.a network/.libs/libkaapinet.a ws/.libs/libkaapiws.a
api-atha/.libs/libatha.a st/.libs/libkaapisched.a -Wl,--no-whole-archive -lrt
-L/usr/lib/gcc/i486-linux-gnu/4.2.3
-L/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib -L/lib/../lib
-L/usr/lib/../lib -L/usr/lib/gcc/i486-linux-gnu/4.2.3/../../.. -lstdc++ -lm -lc
-lgcc_s /usr/lib/gcc/i486-linux-gnu/4.2.3/crtendS.o
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crtn.o -pthread -Wl,-soname
-Wl,libkaapi.so.0 -o .libs/libkaapi.so.0.0.0
(cd .libs && rm -f libkaapi.so.0 && ln -s libkaapi.so.0.0.0 libkaapi.so.0)
(cd .libs && rm -f libkaapi.so && ln -s libkaapi.so.0.0.0 libkaapi.so)
creating libkaapi.la
(cd .libs && rm -f libkaapi.la && ln -s ../libkaapi.la libkaapi.la)
[EMAIL PROTECTED]:~/travail/Recherche/KAAPI/git/build$ objdump -x
.libs/libkaapi.so.0.0.0 | grep NEEDED | grep pthread
[EMAIL PROTECTED]:~/travail/Recherche/KAAPI/git/build$ /bin/sh ./libtool
--tag=CXX --mode=link g++ -g -O2 -version-info 0:0:0 -o libkaapi.la -rpath
/home/vdanjean/kaapi/lib utils/libkaapiutils.la kernel/libkaapicore.la
rfo/libkaapirfo.la dfg/libkaapidfg.la network/libkaapinet.la ws/libkaapiws.la
api-atha/libatha.la st/libkaapisched.la -lpthread
rm -fr .libs/libkaapi.la .libs/libkaapi.lai .libs/libkaapi.so
.libs/libkaapi.so.0 .libs/libkaapi.so.0.0.0
g++ -shared -nostdlib /usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crti.o
/usr/lib/gcc/i486-linux-gnu/4.2.3/crtbeginS.o -Wl,--whole-archive
utils/.libs/libkaapiutils.a kernel/.libs/libkaapicore.a rfo/.libs/libkaapirfo.a
dfg/.libs/libkaapidfg.a network/.libs/libkaapinet.a ws/.libs/libkaapiws.a
api-atha/.libs/libatha.a st/.libs/libkaapisched.a -Wl,--no-whole-archive -lrt
-lpthread -L/usr/lib/gcc/i486-linux-gnu/4.2.3
-L/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib -L/lib/../lib
-L/usr/lib/../lib -L/usr/lib/gcc/i486-linux-gnu/4.2.3/../../.. -lstdc++ -lm -lc
-lgcc_s /usr/lib/gcc/i486-linux-gnu/4.2.3/crtendS.o
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crtn.o -Wl,-soname
-Wl,libkaapi.so.0 -o .libs/libkaapi.so.0.0.0
(cd .libs && rm -f libkaapi.so.0 && ln -s libkaapi.so.0.0.0 libkaapi.so.0)
(cd .libs && rm -f libkaapi.so && ln -s libkaapi.so.0.0.0 libkaapi.so)
creating libkaapi.la
(cd .libs && rm -f libkaapi.la && ln -s ../libkaapi.la libkaapi.la)
[EMAIL PROTECTED]:~/travail/Recherche/KAAPI/git/build$ objdump -x
.libs/libkaapi.so.0.0.0 | grep NEEDED | grep pthread
NEEDED libpthread.so.0
[EMAIL PROTECTED]:~/travail/Recherche/KAAPI/git/build$
The fact that g++ ignore -pthread when -nostdlib is present :
[EMAIL PROTECTED]:/tmp$ cat toto.c
int main() {return 0; }
[EMAIL PROTECTED]:/tmp$ g++ -c -Wall toto.c
[EMAIL PROTECTED]:/tmp$ g++ -v -shared toto.o -pthread -lrt -Wl,-soname
-Wl,libkaapi.so.0 -o toto
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v
--enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr
--enable-shared --with-system-zlib --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix --enable-nls
--with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2
--enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr
--disable-libmudflap --enable-targets=all --enable-checking=release
--build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.2.3 (Debian 4.2.3-1)
/usr/lib/gcc/i486-linux-gnu/4.2.3/collect2 --eh-frame-hdr -m elf_i386
--hash-style=both -shared -o toto
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crti.o
/usr/lib/gcc/i486-linux-gnu/4.2.3/crtbeginS.o
-L/usr/lib/gcc/i486-linux-gnu/4.2.3 -L/usr/lib/gcc/i486-linux-gnu/4.2.3
-L/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib -L/lib/../lib
-L/usr/lib/../lib -L/usr/lib/gcc/i486-linux-gnu/4.2.3/../../.. toto.o -lrt
-soname libkaapi.so.0 -lstdc++ -lm -lgcc_s -lpthread -lc -lgcc_s
/usr/lib/gcc/i486-linux-gnu/4.2.3/crtendS.o
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crtn.o
[EMAIL PROTECTED]:/tmp$ objdump -x toto | grep NEEDED | grep pthread
NEEDED libpthread.so.0
[EMAIL PROTECTED]:/tmp$ g++ -v -shared -nostdlib
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crti.o
/usr/lib/gcc/i486-linux-gnu/4.2.3/crtbeginS.o toto.o -pthread -lrt
-L/usr/lib/gcc/i486-linux-gnu/4.2.3
-L/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib -L/lib/../lib
-L/usr/lib/../lib -L/usr/lib/gcc/i486-linux-gnu/4.2.3/../../.. -lstdc++ -lm
-lc -lgcc_s /usr/lib/gcc/i486-linux-gnu/4.2.3/crtendS.o
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crtn.o -Wl,-soname
-Wl,libkaapi.so.0 -o toto
Using built-in specs.
Target: i486-linux-gnu
Configured with: ../src/configure -v
--enable-languages=c,c++,fortran,objc,obj-c++,treelang --prefix=/usr
--enable-shared --with-system-zlib --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix --enable-nls
--with-gxx-include-dir=/usr/include/c++/4.2 --program-suffix=-4.2
--enable-clocale=gnu --enable-libstdcxx-debug --enable-objc-gc --enable-mpfr
--disable-libmudflap --enable-targets=all --enable-checking=release
--build=i486-linux-gnu --host=i486-linux-gnu --target=i486-linux-gnu
Thread model: posix
gcc version 4.2.3 (Debian 4.2.3-1)
/usr/lib/gcc/i486-linux-gnu/4.2.3/collect2 --eh-frame-hdr -m elf_i386
--hash-style=both -shared -o toto -L/usr/lib/gcc/i486-linux-gnu/4.2.3
-L/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib -L/lib/../lib
-L/usr/lib/../lib -L/usr/lib/gcc/i486-linux-gnu/4.2.3/../../..
-L/usr/lib/gcc/i486-linux-gnu/4.2.3 -L/usr/lib/gcc/i486-linux-gnu/4.2.3
-L/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib -L/lib/../lib
-L/usr/lib/../lib -L/usr/lib/gcc/i486-linux-gnu/4.2.3/../../..
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crti.o
/usr/lib/gcc/i486-linux-gnu/4.2.3/crtbeginS.o toto.o -lrt -lstdc++ -lm -lc
-lgcc_s /usr/lib/gcc/i486-linux-gnu/4.2.3/crtendS.o
/usr/lib/gcc/i486-linux-gnu/4.2.3/../../../../lib/crtn.o -soname libkaapi.so.0
[EMAIL PROTECTED]:/tmp$ objdump -x toto | grep NEEDED | grep pthread
[EMAIL PROTECTED]:/tmp$
Best regards,
Vincent
-- System Information:
Debian Release: lenny/sid
APT prefers unstable
APT policy: (990, 'unstable'), (500, 'testing'), (500, 'stable'), (1,
'experimental')
Architecture: i386 (i686)
Kernel: Linux 2.6.24-1-686 (SMP w/1 CPU core)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Versions of packages libtool depends on:
ii autotools-dev 20070725.1 Update infrastructure for config.{
ii cpp 4:4.2.2-2 The GNU C preprocessor (cpp)
ii file 4.23-2 Determines file type using "magic"
ii gcc [c-compiler] 4:4.2.2-2 The GNU C compiler
ii gcc-3.3 [c-compiler] 1:3.3.6-15 The GNU C compiler
ii gcc-3.4 [c-compiler] 3.4.6-6 The GNU C compiler
ii gcc-4.1 [c-compiler] 4.1.2-19 The GNU C compiler
ii gcc-4.2 [c-compiler] 4.2.3-1 The GNU C compiler
ii libc6-dev [libc-dev] 2.7-8 GNU C Library: Development Librari
Versions of packages libtool recommends:
ii libltdl3-dev 1.5.26-1 A system independent dlopen wrappe
-- no debconf information
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]