Dear all,

we have a large C++ project containing of several modules which each get 
compiled into seperate shared libraries. Our directory structure looks 
somehow as follows:

---snip---
<src>
        <module_1>
        <module_2>
        <module_3>
        <module_4>
        ....
        <module_n>
---snap---

During compilation the shared libraries get placed under 
"<src>/<module_X>/.libs".

The resulting binary can be exectuted directly from our build directory.

The output for module "commonbasics" during linking you can see below.

---snip---
/bin/sh ../../libtool --tag=CXX   --mode=link g++  -DDEBUG -Wcast-align 
-Wundef -Wconversion -fno-builtin -Wnon-virtual-dtor -Wno-long-long -g 
-Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings 
-D_GNU_SOURCE -I/usr/X11R7/include -fno-exceptions -fno-rtti 
-fno-check-new -DQT_THREAD_SUPPORT -fno-exceptions -fno-rtti -version-info 
1:0:0 -L/lib/qt-x11-338/lib -L/usr/include/lib -L/usr/lib -o 
libCommonBasics.la -rpath /opt/kmt/lib libCommonBasics_la-Base64.lo 
libCommonBasics_la-CommonOS.lo libCommonBasics_la-ConfigAccessXML.lo 
libCommonBasics_la-ConfigKeyXML.lo libCommonBasics_la-Debug.lo 
libCommonBasics_la-global_funcs.lo libCommonBasics_la-Authentication.lo 
libCommonBasics_la-LoggingCtrl.lo libCommonBasics_la-LoggingFile.lo 
libCommonBasics_la-LoggingService.lo 
libCommonBasics_la-moc_ExternalProcess.lo 
libCommonBasics_la-ExternalProcess.lo 
libCommonBasics_la-LoggingInterface.lo libCommonBasics_la-LoggingRemote.lo 
libCommonBasics_la-strhelper.lo libCommonBasics_la-Timeval.lo 
libCommonBasics_la-UnitConvert.lo ../../src/commandline/libCommandLine.la 
../../src/hash/libHash.la ../../src/uuid/libUUID.la -lqt-mt -lfreetype
libtool: link: g++ -shared -nostdlib 
/usr/lib/gcc/i686-t2-linux-gnu/4.4.3/../../../crti.o 
/usr/lib/gcc/i686-t2-linux-gnu/4.4.3/crtbeginS.o 
.libs/libCommonBasics_la-Base64.o .libs/libCommonBasics_la-CommonOS.o 
.libs/libCommonBasics_la-ConfigAccessXML.o 
.libs/libCommonBasics_la-ConfigKeyXML.o .libs/libCommonBasics_la-Debug.o 
.libs/libCommonBasics_la-global_funcs.o 
.libs/libCommonBasics_la-Authentication.o 
.libs/libCommonBasics_la-LoggingCtrl.o 
.libs/libCommonBasics_la-LoggingFile.o 
.libs/libCommonBasics_la-LoggingService.o 
.libs/libCommonBasics_la-moc_ExternalProcess.o 
.libs/libCommonBasics_la-ExternalProcess.o 
.libs/libCommonBasics_la-LoggingInterface.o 
.libs/libCommonBasics_la-LoggingRemote.o 
.libs/libCommonBasics_la-strhelper.o .libs/libCommonBasics_la-Timeval.o 
.libs/libCommonBasics_la-UnitConvert.o   -Wl,-rpath 
-Wl,/root/KMT/KMT/src/commandline/.libs -Wl,-rpath 
-Wl,/root/KMT/KMT/src/hash/.libs -Wl,-rpath 
-Wl,/root/KMT/KMT/src/uuid/.libs -L/lib/qt-x11-338/lib -L/usr/include/lib 
-L/usr/lib ../../src/commandline/.libs/libCommandLine.so 
-L/opt/postgresql/lib -L/usr/X11R7/lib -L//lib 
-L/TOOLCHAIN/src.gcc.default.20100331.154012.28770.tut-pc188/gcc-4.4.3/objdir/i686-t2-linux-gnu/libstdc++-v3/src
 
-L/TOOLCHAIN/src.gcc.default.20100331.154012.28770.tut-pc188/gcc-4.4.3/objdir/i686-t2-linux-gnu/libstdc++-v3/src/.libs
 
../../src/hash/.libs/libHash.so ../../src/uuid/.libs/libUUID.so 
/usr/X11R7/lib/libXfixes.so /usr/lib/libexpat.so /usr/X11R7/lib/libxcb.so 
/usr/X11R7/lib/libXau.so /usr/lib/libuuid.so 
/lib/qt-x11-338/lib/libqt-mt.so /usr/X11R7/lib/libXrender.so 
/usr/X11R7/lib/libXrandr.so /usr/X11R7/lib/libXcursor.so 
/usr/X11R7/lib/libXinerama.so /usr/X11R7/lib/libXft.so 
/usr/X11R7/lib/libfontconfig.so /usr/X11R7/lib/libXext.so 
/usr/X11R7/lib/libX11.so /usr/X11R7/lib/libSM.so /usr/X11R7/lib/libICE.so 
-ldl -lpthread /usr/lib/libfreetype.so -lz 
-L/usr/lib/gcc/i686-t2-linux-gnu/4.4.3 
-L/usr/lib/gcc/i686-t2-linux-gnu/4.4.3/../../../../i686-t2-linux-gnu/lib 
-L/usr/lib/gcc/i686-t2-linux-gnu/4.4.3/../../.. /usr/lib/libstdc++.so -lm 
-lc -lgcc_s /usr/lib/gcc/i686-t2-linux-gnu/4.4.3/crtendS.o 
/usr/lib/gcc/i686-t2-linux-gnu/4.4.3/../../../crtn.o    -Wl,-soname 
-Wl,libCommonBasics.so.1 -o .libs/libCommonBasics.so.1.0.0
libtool: link: (cd ".libs" && rm -f "libCommonBasics.so.1" && ln -s 
"libCommonBasics.so.1.0.0" "libCommonBasics.so.1")
libtool: link: (cd ".libs" && rm -f "libCommonBasics.so" && ln -s 
"libCommonBasics.so.1.0.0" "libCommonBasics.so")
libtool: link: ( cd ".libs" && rm -f "libCommonBasics.la" && ln -s 
"../libCommonBasics.la" "libCommonBasics.la" )
---snap---

As one can see, absolute paths are compiled into the resulting library for 
the RPATH. (/root/KMT/KMT/src/commandline/.libs)

When performing the "make install" step all the libraries and binaries get 
installed to our prefix directory "/opt/kmt". This currently takes very 
long (~20 minutes) as libtool relinks all libraries. The output for module 
"commonbasics" you can see below.

---snip---
-bash-4.1# make install DESTDIR=/
make[1]: Entering directory `/root/KMT/KMT/src/commonbasics'
test -z "/opt/kmt/lib" || ../../admin/install-sh -c -d "//opt/kmt/lib"
 /bin/sh ../../libtool   --mode=install /usr/bin/install -c 
libCommonBasics.la '//opt/kmt/lib'
libtool: install: warning: relinking `libCommonBasics.la'
libtool: install: (cd /root/KMT/KMT/src/commonbasics; /bin/sh 
/root/KMT/KMT/libtool  --tag CXX --mode=relink g++ -DDEBUG -Wcast-align 
-Wundef -Wconversion -fno-builtin -Wnon-virtual-dtor -Wno-long-long -g 
-Wall -pedantic -W -Wpointer-arith -Wmissing-prototypes -Wwrite-strings 
-D_GNU_SOURCE -I/usr/X11R7/include -fno-exceptions -fno-rtti 
-fno-check-new -DQT_THREAD_SUPPORT -fno-exceptions -fno-rtti -version-info 
1:0:0 -L/lib/qt-x11-338/lib -L/usr/include/lib -L/usr/lib -o 
libCommonBasics.la -rpath /opt/kmt/lib libCommonBasics_la-Base64.lo 
libCommonBasics_la-CommonOS.lo libCommonBasics_la-ConfigAccessXML.lo 
libCommonBasics_la-ConfigKeyXML.lo libCommonBasics_la-Debug.lo 
libCommonBasics_la-global_funcs.lo libCommonBasics_la-Authentication.lo 
libCommonBasics_la-LoggingCtrl.lo libCommonBasics_la-LoggingFile.lo 
libCommonBasics_la-LoggingService.lo 
libCommonBasics_la-moc_ExternalProcess.lo 
libCommonBasics_la-ExternalProcess.lo 
libCommonBasics_la-LoggingInterface.lo libCommonBasics_la-LoggingRemote.lo 
libCommonBasics_la-strhelper.lo libCommonBasics_la-Timeval.lo 
libCommonBasics_la-UnitConvert.lo ../../src/commandline/libCommandLine.la 
../../src/hash/libHash.la ../../src/uuid/libUUID.la -lqt-mt -lfreetype 
-inst-prefix-dir /)
libtool: relink: g++ -shared -nostdlib 
/usr/lib/gcc/i686-t2-linux-gnu/4.4.3/../../../crti.o 
/usr/lib/gcc/i686-t2-linux-gnu/4.4.3/crtbeginS.o 
.libs/libCommonBasics_la-Base64.o .libs/libCommonBasics_la-CommonOS.o 
.libs/libCommonBasics_la-ConfigAccessXML.o 
.libs/libCommonBasics_la-ConfigKeyXML.o .libs/libCommonBasics_la-Debug.o 
.libs/libCommonBasics_la-global_funcs.o 
.libs/libCommonBasics_la-Authentication.o 
.libs/libCommonBasics_la-LoggingCtrl.o 
.libs/libCommonBasics_la-LoggingFile.o 
.libs/libCommonBasics_la-LoggingService.o 
.libs/libCommonBasics_la-moc_ExternalProcess.o 
.libs/libCommonBasics_la-ExternalProcess.o 
.libs/libCommonBasics_la-LoggingInterface.o 
.libs/libCommonBasics_la-LoggingRemote.o 
.libs/libCommonBasics_la-strhelper.o .libs/libCommonBasics_la-Timeval.o 
.libs/libCommonBasics_la-UnitConvert.o   -L/lib/qt-x11-338/lib 
-L/usr/include/lib -L/usr/lib -L//opt/kmt/lib -L/opt/kmt/lib -lCommandLine 
-L/opt/postgresql/lib -L/usr/X11R7/lib -L//lib 
-L/TOOLCHAIN/src.gcc.default.20100331.154012.28770.tut-pc188/gcc-4.4.3/objdir/i686-t2-linux-gnu/libstdc++-v3/src
 
-L/TOOLCHAIN/src.gcc.default.20100331.154012.28770.tut-pc188/gcc-4.4.3/objdir/i686-t2-linux-gnu/libstdc++-v3/src/.libs
 
-lHash -lUUID -L//usr/X11R7/lib -lXfixes -L//usr/lib -lexpat -lxcb -lXau 
-luuid -L//lib/qt-x11-338/lib -lqt-mt -lXrender -lXrandr -lXcursor 
-lXinerama -lXft -lfontconfig -lXext -lX11 -lSM -lICE -ldl -lpthread 
-lfreetype -lz -L/usr/lib/gcc/i686-t2-linux-gnu/4.4.3 
-L/usr/lib/gcc/i686-t2-linux-gnu/4.4.3/../../../../i686-t2-linux-gnu/lib 
-L/usr/lib/gcc/i686-t2-linux-gnu/4.4.3/../../.. -lstdc++ -lm -lc -lgcc_s 
/usr/lib/gcc/i686-t2-linux-gnu/4.4.3/crtendS.o 
/usr/lib/gcc/i686-t2-linux-gnu/4.4.3/../../../crtn.o    -Wl,-soname 
-Wl,libCommonBasics.so.1 -o .libs/libCommonBasics.so.1.0.0
libtool: install: /usr/bin/install -c .libs/libCommonBasics.so.1.0.0T 
//opt/kmt/lib/libCommonBasics.so.1.0.0
libtool: install: (cd //opt/kmt/lib && { ln -s -f libCommonBasics.so.1.0.0 
libCommonBasics.so.1 || { rm -f libCommonBasics.so.1 && ln -s 
libCommonBasics.so.1.0.0 libCommonBasics.so.1; }; })
libtool: install: (cd //opt/kmt/lib && { ln -s -f libCommonBasics.so.1.0.0 
libCommonBasics.so || { rm -f libCommonBasics.so && ln -s 
libCommonBasics.so.1.0.0 libCommonBasics.so; }; })
libtool: install: /usr/bin/install -c .libs/libCommonBasics.lai 
//opt/kmt/lib/libCommonBasics.la
libtool: install: warning: remember to run `libtool --finish /opt/kmt/lib'
make[1]: Nothing to be done for `install-data-am'.
make[1]: Leaving directory `/root/KMT/KMT/src/commonbasics'
---snap---

How can I avoid this additional relinking step during "make install"? I 
guess it's because of the absolutes paths which get compiled into the 
libraries RPATH during compilation. Actually, we always want to run the 
binary from it's install prefix and not out of the build tree. How can I 
force libtool to set the correct rpath for the resulting libraries already 
during the compilation step so that relinking ist not needed anymore 
during "make install".

We are using libtool-2.2.6b and automake-1.11.1. Please feel free to ask 
any further information which you might need to figure out the problem.

Thanks for any comments on this,

Markus Franke



"Disclaimer: This message is intended only for the use of the individual 
or entity to
which it is addressed and may contain information which is privileged, 
confidential, proprietary,
or exempt from disclosure under applicable law. If you are not the 
intended recipient or the person
responsible for delivering the message to the intended recipient, you are 
strictly prohibited from
disclosing, distributing, copying, or in any way using this message. If 
you have received this 
communication in error, please notify the sender and destroy and delete 
any copies you may have
received."
_______________________________________________
http://lists.gnu.org/mailman/listinfo/libtool

Reply via email to