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

Reply via email to