Hi, I'm experimenting with the attached skeleton project on a Debian buster system (autoconf 2.69-11, automake 1:1.16.1-4 and libtool 2.4.6-9):
$ autoreconf -f -i $ ./configure --prefix=/tmp/translib $ make $ ./translib; echo $? 6 $ make install make[1]: Entering directory '/home/wferi/ha/pacemaker/translib' /bin/mkdir -p '/tmp/translib/lib' /bin/bash ./libtool --mode=install /usr/bin/install -c a/liba.la b/libb.la '/tmp/translib/lib' libtool: warning: relinking 'a/liba.la' libtool: install: (cd /home/wferi/ha/pacemaker/translib; /bin/bash "/home/wferi/ha/pacemaker/translib/libtool" --tag CC --mode=relink gcc -g -O2 -avoid-version -o a/liba.la -rpath /tmp/translib/lib a/a.lo b/libb.la ) libtool: relink: gcc -shared -fPIC -DPIC a/.libs/a.o -Wl,-rpath -Wl,/tmp/translib/lib -L/tmp/translib/lib -lb -g -O2 -Wl,-soname -Wl,liba.so -o a/.libs/liba.so /usr/bin/ld: cannot find -lb collect2: error: ld returned 1 exit status libtool: error: error: relink 'a/liba.la' with the above command before installing it make[1]: *** [Makefile:446: install-libLTLIBRARIES] Error 1 make[1]: Leaving directory '/home/wferi/ha/pacemaker/translib' make: *** [Makefile:798: install-am] Error 2 No cyclic dependencies here, so this can be worked around by -lib_LTLIBRARIES = a/liba.la b/libb.la +lib_LTLIBRARIES = b/libb.la a/liba.la in this case; is this expected (and documented) behavior? Anyway: if, after a successful installation, I introduce a new symbol (b2) in libb diff --git a/a/a.c b/a/a.c index ffc6553..8edd6f5 100644 --- a/a/a.c +++ b/a/a.c @@ -3,5 +3,5 @@ int a (int x) { - return b(x)+1; + return b(x)+b2(x)+1; } diff --git a/b/b.c b/b/b.c index 27bd35f..a723efc 100644 --- a/b/b.c +++ b/b/b.c @@ -4,3 +4,8 @@ int b (int x) { return x+2; } + +int b2 (int x) +{ + return x+3; +} diff --git a/b/b.h b/b/b.h index 2290498..c0ea0fb 100644 --- a/b/b.h +++ b/b/b.h @@ -1 +1,2 @@ int b (int x); +int b2 (int x); and use it from liba, linking the final binary fails: $ make [...] /bin/bash ./libtool --tag=CC --mode=link gcc -g -O2 -avoid-version -o translib translib.o a/liba.la libtool: link: gcc -g -O2 -o .libs/translib translib.o a/.libs/liba.so -Wl,-rpath -Wl,/tmp/translib/lib /usr/bin/ld: a/.libs/liba.so: undefined reference to `b2' As I understand it, the -rpath linker option on the above command makes a/.libs/liba.so use the already installed (old) version of libb, which lacks the b2 symbol. What's the solution here? Why isn't that -rpath option "delayed" until the relinking phase? -- Thanks, Feri
translib.tgz
Description: application/gtar-compressed