libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

libtool relinks all shared libraries when "make install" is performed


From: Markus Franke
Subject: libtool relinks all shared libraries when "make install" is performed
Date: Wed, 23 Mar 2011 17:18:53 +0100


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."

reply via email to

[Prev in Thread] Current Thread [Next in Thread]