The relinking warning is just to let you know it is linking, it isn't a potential problem.
Robert Boehne On Sep 19, 2013 6:21 PM, "Michael Young" <young....@gmail.com> wrote: > I was originally going to post this to the gmp-discuss list, but after > reviewing > it, it seems like it fits better here. Please kindly redirect me if this > is > better handled elsewhere... > > I'm trying to do a staged build/install of libgmp(xx) release 5.1.2. This > is > part of an effort to develop a "general" build system (mostly bash > scripts, make > files, etc.) for toolchains I will be using. I intend to use these > scripts to > build both native and cross-builds, depending on configuration / > arguments, so > using DESTDIR for prefixing the install tree is important. Right now, I'm > working on native builds on an Ubuntu 12.04 32-bit x86 machine; libtool > version = 2.4.2.) > > When building/installing gmp, I use DESTDIR with make install (as follows, > with > the configured prefix being > "/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install"), as > follows: > > make install DESTDIR=/home/youngmj/tmp > > I get the following warning / output: > > *** > <*snip*> > libtool: install: warning: relinking `libgmpxx.la' > libtool: install: (cd > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/build; > /bin/bash > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/build/libtool > --tag CXX --mode=relink g++ -version-info 7:2:3 -o libgmpxx.la -rpath > /home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib dummy.lo > cxx/isfuns.lo cxx/ismpf.lo cxx/ismpq.lo cxx/ismpz.lo cxx/ismpznw.lo > cxx/limits.lo cxx/osdoprnti.lo cxx/osfuns.lo cxx/osmpf.lo cxx/osmpq.lo > cxx/osmpz.lo libgmp.la -inst-prefix-dir /home/youngmj/tmp) > libtool: relink: g++ -fPIC -DPIC -shared -nostdlib > /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crti.o > /usr/lib/gcc/i686-linux-gnu/4.6/crtbeginS.o .libs/dummy.o > cxx/.libs/isfuns.o cxx/.libs/ismpf.o cxx/.libs/ismpq.o cxx/.libs/ismpz.o > cxx/.libs/ismpznw.o cxx/.libs/limits.o cxx/.libs/osdoprnti.o > cxx/.libs/osfuns.o cxx/.libs/osmpf.o cxx/.libs/osmpq.o cxx/.libs/osmpz.o > -Wl,-rpath > -Wl,/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib > -L/home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib > -L/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib -lgmp > -L/usr/lib/gcc/i686-linux-gnu/4.6 > -L/usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu > -L/usr/lib/gcc/i686-linux-gnu/4.6/../../../../lib -L/lib/i386-linux-gnu > -L/lib/../lib -L/usr/lib/i386-linux-gnu -L/usr/lib/../lib -L. > -L/usr/lib/gcc/i686-linux-gnu/4.6/../../.. -lstdc++ -lm -lc -lgcc_s > /usr/lib/gcc/i686-linux-gnu/4.6/crtendS.o > /usr/lib/gcc/i686-linux-gnu/4.6/../../../i386-linux-gnu/crtn.o > -Wl,-soname -Wl,libgmpxx.so.4 -o .libs/libgmpxx.so.4.3.2 > libtool: install: /usr/bin/install -c .libs/libgmpxx.so.4.3.2T > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib/libgmpxx.so.4.3.2 > libtool: install: (cd > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib > && { ln -s -f libgmpxx.so.4.3.2 libgmpxx.so.4 || { rm -f libgmpxx.so.4 && > ln -s libgmpxx.so.4.3.2 libgmpxx.so.4; }; }) > libtool: install: (cd > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib > && { ln -s -f libgmpxx.so.4.3.2 libgmpxx.so || { rm -f libgmpxx.so && ln -s > libgmpxx.so.4.3.2 libgmpxx.so; }; }) > libtool: install: /usr/bin/install -c .libs/libgmpxx.lai > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib/ > libgmpxx.la > libtool: install: /usr/bin/install -c .libs/libgmp.a > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib/libgmp.a > libtool: install: chmod 644 > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib/libgmp.a > libtool: install: ranlib > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib/libgmp.a > libtool: install: /usr/bin/install -c .libs/libgmpxx.a > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib/libgmpxx.a > libtool: install: chmod 644 > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib/libgmpxx.a > libtool: install: ranlib > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib/libgmpxx.a > libtool: install: warning: remember to run `libtool --finish > /home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib' > <*snip*> > **** > > [BTW - the "T" in the .so library version (4th line) looks wierd... can > anyone > verify this is OK?] > > The second warning is not the primary problem - I run the finish command > once I > move the installation into place. The first warning (relinking) is what > I'm most > concerned about. I see where the warning is coming from - the following is > in > libgmpxx.la after the build and verification (make check), but prior to > install: > > *** > <*snip*> > # Libraries that this one depends upon. > dependency_libs=' > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/build/ > libgmp.la' > <*snip*> > # Directory that this library needs to be installed in: > libdir='/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib' > relink_command="(cd > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/build; > /bin/bash > /home/youngmj/tmp/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/build/libtool > --tag CXX --mode=relink g++ -version-info 7:2:3 -o libgmpxx.la -rpath > /home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib dummy.lo > cxx/isfuns.lo cxx/ismpf.lo cxx/ismpq.lo cxx/ismpz.lo cxx/ismpznw.lo > cxx/limits.lo cxx/osdoprnti.lo cxx/osfuns.lo cxx/osmpf.lo cxx/osmpq.lo > cxx/osmpz.lo libgmp.la @inst_prefix_dir@)" > *** > > I did some searching on the web, and I found some discussions for gmp > version 4.1 (circa 2002!) - see here for an example of what I found: > "http://www.hep.by/gnu/gmp/Known-Build-Problems.html". (I also found > suggested workarounds that set LD_LIBRARY_PATH to include the staging > directory, instead of adding -Lstage_path to libtool's relink.) However, > this > information is ~10 years old. Libtool may now handle this situation more > elegantly, using -inst-prefix-dir (based on my reading of info here: > "http://www.gnu.org/software/libtool/manual/html_node/Install-mode.html"). > > Here's what I *think* I understand: > a) there is a need to relink libgmpxx upon install (for staged installs) to > correctly set rpath (to pick up libgmp) in libgmpxx.so > b) libtool uses -inst-prefix-dir for this relink to ensure that the relink > uses > the correct object files and libgmp.so (from the staging directory), but > sets > rpath to the final destination for libgmp.so. > > I do see that my installed libgmpxx.so (after moving it to its final > destination > and running "libtool --finish" as directed) does have the correct rpath in > it: > > $ readelf -d > /home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib/libgmpxx.so > | grep RPATH > 0x0000000f (RPATH) Library rpath: > [/home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib] > > For my testing, there was nothing in the final destination directory prior > to me > moving the newly built entity there (but this will probably not be the > case in > general usage of my build scripts), so the only place that libgmp.so could > be > picked up is either in the staging directory or in the default system > location > (/usr/lib/i386-linux-gnu), as there is no version of this library > elsewhere in > ldconfig/LD_LIBRARY_PATH. > > Based on what I see in libgmpxx.la (as copied above, from > "dependency_libs" and > "relink_command" lines), I would *assume* that libgmp.so is being picked > up from > the staging directory when relinking, although I don't know how I can > verify > this. But if this is the case, why is libtool issuing a warning? Is this > really just a red herring, and only there for "informational" purposes, or > am I > doing something wrong/questionable? > > Lastly, as I previously mentioned, I run the "libtool --finish" command as > directed. (For "native" builds, this command is performed on the build > machine > itself, but for cross-builds, I assume it is to be performed on the target > machine once the library files are moved into place.) But I'm very > confused > about what it actually does. From my readings, and looking at the output > from > the command (at bottom), I gather that it sets the library search path for > the > system - using ldconfig - so users can pick up the newly installed (libgmp) > library. But if it's really doing that, > a) why am I not seeing any change via ldconfig? (Perhaps I need to run the > finish command using sudo?) > b) why is the output stating that I need to set LD_LIBRARY_PATH or > edit/add a > *.conf file when I use ld (vs. libtool)? > Based on observation, I can only conclude it's NOT actually making changes > to > the system configuration via ldconfig. If it's only processing the > specified > path, not updating the linker cache, and not updating the configuration > files > (ld.so.conf or its includes), what is it doing? The only thing that I > could > detect that it does is create the libtool control (.la) files for the newly > installed libraries. Can anyone confirm that this is the case? > > In truth, this is really what I think I want. I don't want libtool to > update > system configuration files because I will have multiple (native + > cross-builds, > all different versions) toolchains and libraries on my build system and do > not > want to "disturb"/replace the "default" system configuration. I was not > intending to use automake/libtool for my own projects that use the built > tools, > and I was expecting to explicitly set LD_LIBRARY_PATH to pull in the > correct > (libgmp) libraries. Other than being somewhat of a maintenance headache > (hence, > I'm developing a "SET_BUILD_ENVIRONMENT" utility script to simplify things > for > using the tools and libraries), is there any reason this won't work? If > "libtool --finish" only creates the .la files (and not affect system > configuration), I'll still do it, since other tools (e.g., gcc) may use > gmp and > libtool. > > Thanks for any feedback/insight. > - Michael > > *** > libtool: finish: PATH="xxx__my_path__xxx" ldconfig -n > /home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib > ---------------------------------------------------------------------- > Libraries have been installed in: > /home/youngmj/DevTools_3/gmp/Version_5.1.2/gmp__native/install/lib > > If you ever happen to want to link against installed libraries > in a given directory, LIBDIR, you must either use libtool, and > specify the full pathname of the library, or use the `-LLIBDIR' > flag during linking and do at least one of the following: > - add LIBDIR to the `LD_LIBRARY_PATH' environment variable > during execution > - add LIBDIR to the `LD_RUN_PATH' environment variable > during linking > - use the `-Wl,-rpath -Wl,LIBDIR' linker flag > - have your system administrator add LIBDIR to `/etc/ld.so.conf' > > See any operating system documentation about shared libraries for > more information, such as the ld(1) and ld.so(8) manual pages. > ---------------------------------------------------------------------- > *** > > > _______________________________________________ > https://lists.gnu.org/mailman/listinfo/libtool > >
_______________________________________________ https://lists.gnu.org/mailman/listinfo/libtool