bug-libtool
[Top][All Lists]
Advanced

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

linking source dir .la's links in build system libraries


From: Han-Wen Nienhuys
Subject: linking source dir .la's links in build system libraries
Date: Mon, 09 Jan 2006 13:08:41 +0100
User-agent: Mozilla Thunderbird 1.0.7-1.1.fc4 (X11/20050929)


Hi,

- using libtool 1.5.20
- cross building on darwin 7 (PPC/MacOS 10.3) for a linux/x86/glibc2.2 target.
- building GUILE and gettext

The following happens: the packages contain libA and libB, where libB depends on libA.

During install time, the relink step of libB.la tries to link in

   ../libA/libA.la

libA.la contains "libdir=/usr/lib"

libtool then introduces -L/usr/lib/ on the command line. This has the effect of trying to link various libraries from the build system (/usr/lib/libgcc.a, /usr/lib/libltdl.a) from the build system, which breaks, or even more worrying, it might succeed on some platforms.

our current workaround is to edit the *.la scripts prior to install, substituting "<builddir>/.libs" into the libdir variable.

An example session and --config output is attached.


--
 Han-Wen Nienhuys - address@hidden - http://www.xs4all.nl/~hanwen
$ make install-exec-am DESTDIR=/tmp/foobars
/bin/sh ./libtool --mode=install /usr/bin/install -c  
'libguilereadline-v-16.la' '/tmp/foobars/usr/lib/libguilereadline-v-16.la'
libtool: install: warning: relinking `libguilereadline-v-16.la'
(cd /Users/hanwen/src/gub/target/linux/build/guile-1.7.2-3/guile-readline; 
/bin/sh ./libtool  --tag=CC --mode=relink i686-linux-gcc -g -O2 -Wl,--as-needed 
-o libguilereadline-v-16.la -rpath /usr/lib -version-info 16:0:0 
-export-dynamic -no-undefined readline.lo ../libguile/libguile.la 
-inst-prefix-dir /tmp/foobars)
libtool: link: warning: 
`/Users/hanwen/src/gub/target/linux/system//usr/lib//libgmp.la' seems to be 
moved
libtool: link: warning: 
`/Users/hanwen/src/gub/target/linux/system//usr/lib//libltdl.la' seems to be 
moved
i686-linux-gcc  -shared  .libs/readline.o  -L/tmp/foobars/usr/lib -L/usr/lib 
-lguile -L/Users/hanwen/src/gub/target/linux/system//usr/lib/  -Wl,--as-needed 
-Wl,-soname -Wl,libguilereadline-v-16.so.16 -o 
.libs/libguilereadline-v-16.so.16.0.0
/usr/lib/libgcc.a: could not read symbols: Archive has no index; run ranlib to 
add one
collect2: ld returned 1 exit status
libtool: install: error: relink `libguilereadline-v-16.la' with the above 
command before installing it
make: *** [install-libLTLIBRARIES] Error 1

$ grep libdir ../libguile/libguile.la
libdir='/usr/lib'


$ perl -i~ -pe "s^libdir='^libdir='BROOOOOOOOOOOOKEN^g" ../libguile/libguile.la

$ (cd /Users/hanwen/src/gub/target/linux/build/guile-1.7.2-3/guile-readline; 
/bin/sh ./libtool  --tag=CC --mode=relink i686-linux-gcc -g -O2 -Wl,--as-needed 
-o libguilereadline-v-16.la -rpath /usr/lib -version-info 16:0:0 
-export-dynamic -no-undefined readline.lo ../libguile/libguile.la 
-inst-prefix-dir /tmp/foobars)
libtool: link: warning: 
`/Users/hanwen/src/gub/target/linux/system//usr/lib//libgmp.la' seems to be 
moved
libtool: link: warning: 
`/Users/hanwen/src/gub/target/linux/system//usr/lib//libltdl.la' seems to be 
moved
i686-linux-gcc  -shared  .libs/readline.o  -Wl,--rpath 
-Wl,BROOOOOOOOOOOOKEN/usr/lib -LBROOOOOOOOOOOOKEN/usr/lib -lguile 
-L/Users/hanwen/src/gub/target/linux/system//usr/lib/  -Wl,--as-needed 
-Wl,-soname -Wl,libguilereadline-v-16.so.16 -o 
.libs/libguilereadline-v-16.so.16.0.0
/Users/hanwen/src/gub/target/linux/system/usr/cross/bin/i686-linux-ld: cannot 
find -lguile
collect2: ld returned 1 exit status

$ perl
 -i~ -pe "s^libdir='.*\$^libdir='../libguile/.libs'^g"
 ../libguile/libguile.la
$ (cd /Users/hanwen/src/gub/target/linux/build/guile-1.7.2-3/guile-readline; 
/bin/sh ./libtool  --tag=CC --mode=relink i686-linux-gcc -g -O2 -Wl,--as-needed 
-o libguilereadline-v-16.la -rpath /usr/lib -version-info 16:0:0 
-export-dynamic -no-undefined readline.lo ../libguile/libguile.la 
-inst-prefix-dir /tmp/foobars)
libtool: link: warning: 
`/Users/hanwen/src/gub/target/linux/system//usr/lib//libgmp.la' seems to be 
moved
libtool: link: warning: 
`/Users/hanwen/src/gub/target/linux/system//usr/lib//libltdl.la' seems to be 
moved
i686-linux-gcc  -shared  .libs/readline.o  -Wl,--rpath -Wl,../libguile/.libs 
-L../libguile/.libs -lguile 
-L/Users/hanwen/src/gub/target/linux/system//usr/lib/  -Wl,--as-needed 
-Wl,-soname -Wl,libguilereadline-v-16.so.16 -o 
.libs/libguilereadline-v-16.so.16.0.0
m

$ sh ./libtool --version ltmain.sh (GNU libtool) 1.5.20 (1.1220.2.287 
2005/08/31 18:54:15)

$ sh  ./libtool --config 


# Libtool was configured on host maagd.local:

# Shell to use when invoking shell scripts.
SHELL="/bin/sh"

# Whether or not to build shared libraries.
build_libtool_libs=yes

# Whether or not to build static libraries.
build_old_libs=no

# Whether or not to add -lc for building shared libraries.
build_libtool_need_lc=no

# Whether or not to disallow shared libs when runtime libs are static
allow_libtool_libs_with_static_runtimes=no

# Whether or not to optimize for fast installation.
fast_install=yes

# The host system.
host_alias=i686-linux
host=i686-pc-linux-gnu
host_os=linux-gnu

# The build system.
build_alias=ppc-darwin
build=powerpc-unknown-darwin
build_os=darwin

# An echo program that does not interpret backslashes.
echo="echo"

# The archiver.
AR="i686-linux-ar"
AR_FLAGS="cru"

# A C compiler.
LTCC="i686-linux-gcc "

# A language-specific compiler.
CC="i686-linux-gcc "

# Is the compiler the GNU C compiler?
with_gcc=yes

# An ERE matcher.
EGREP="grep -E"

# The linker used to build libraries.
LD="i686-linux-ld --as-needed"

# Whether we need hard or soft links.
LN_S="ln -s"

# A BSD-compatible nm program.
NM="i686-linux-nm"

# A symbol stripping program
STRIP="i686-linux-strip"

# Used to examine libraries when file_magic_cmd begins "file"
MAGIC_CMD=file

# Used on cygwin: DLL creation program.
DLLTOOL="dlltool"

# Used on cygwin: object dumper.
OBJDUMP="objdump"

# Used on cygwin: assembler.
AS="i686-linux-as"

# The name of the directory that contains temporary libtool files.
objdir=.libs

# How to create reloadable object files.
reload_flag=" -r"
reload_cmds="\$LD\$reload_flag -o \$output\$reload_objs"

# How to pass a linker flag through the compiler.
wl="-Wl,"

# Object file suffix (normally "o").
objext="o"

# Old archive suffix (normally "a").
libext="a"

# Shared library suffix (normally ".so").
shrext_cmds='.so'

# Executable file suffix (normally "").
exeext=""

# Additional compiler flags for building library objects.
pic_flag=" -fPIC -DPIC"
pic_mode=default

# What is the maximum length of a command?
max_cmd_len=32768

# Does compiler simultaneously support -c and -o options?
compiler_c_o="yes"

# Must we lock files when doing compilation?
need_locks="no"

# Do we need the lib prefix for modules?
need_lib_prefix=no

# Do we need a version for libraries?
need_version=no

# Whether dlopen is supported.
dlopen_support=yes

# Whether dlopen of programs is supported.
dlopen_self=unknown

# Whether dlopen of statically linked programs is supported.
dlopen_self_static=unknown

# Compiler flag to prevent dynamic linking.
link_static_flag="-static"

# Compiler flag to turn off builtin functions.
no_builtin_flag=" -fno-builtin"

# Compiler flag to allow reflexive dlopens.
export_dynamic_flag_spec="\${wl}--export-dynamic"

# Compiler flag to generate shared objects directly from archives.
whole_archive_flag_spec="\${wl}--whole-archive\$convenience 
\${wl}--no-whole-archive"

# Compiler flag to generate thread-safe objects.
thread_safe_flag_spec=""

# Library versioning type.
version_type=linux

# Format of library name prefix.
libname_spec="lib\$name"

# List of archive names.  First name is the real one, the rest are links.
# The last name is the one that the linker finds with -lNAME.
library_names_spec="\${libname}\${release}\${shared_ext}\$versuffix 
\${libname}\${release}\${shared_ext}\$major \$libname\${shared_ext}"

# The coded name of the library, if different from the real name.
soname_spec="\${libname}\${release}\${shared_ext}\$major"

# Commands used to build and install an old-style archive.
RANLIB="i686-linux-ranlib"
old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs\$old_deplibs~\$RANLIB 
\$oldlib"
old_postinstall_cmds="\$RANLIB \$oldlib~chmod 644 \$oldlib"
old_postuninstall_cmds=""

# Create an old-style archive from a shared archive.
old_archive_from_new_cmds=""

# Create a temporary old-style archive to link instead of a shared archive.
old_archive_from_expsyms_cmds=""

# Commands used to build and install a shared archive.
archive_cmds="\$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname 
\$wl\$soname -o \$lib"
archive_expsym_cmds="\$echo \\\"{ global:\\\" > \$output_objdir/\$libname.ver~
  cat \$export_symbols | sed -e \\\"s/\\\\(.*\\\\)/\\\\1;/\\\" >> 
\$output_objdir/\$libname.ver~
  \$echo \\\"local: *; };\\\" >> \$output_objdir/\$libname.ver~
          \$CC -shared \$libobjs \$deplibs \$compiler_flags \${wl}-soname 
\$wl\$soname \${wl}-version-script \${wl}\$output_objdir/\$libname.ver -o \$lib"
postinstall_cmds=""
postuninstall_cmds=""

# Commands used to build a loadable module (assumed same as above if empty)
module_cmds=""
module_expsym_cmds=""

# Commands to strip libraries.
old_striplib="i686-linux-strip --strip-debug"
striplib="i686-linux-strip --strip-unneeded"

# Dependencies to place before the objects being linked to create a
# shared library.
predep_objects=""

# Dependencies to place after the objects being linked to create a
# shared library.
postdep_objects=""

# Dependencies to place before the objects being linked to create a
# shared library.
predeps=""

# Dependencies to place after the objects being linked to create a
# shared library.
postdeps=""

# The library search path used internally by the compiler when linking
# a shared library.
compiler_lib_search_path=""

# Method to check whether dependent libraries are shared objects.
deplibs_check_method="pass_all"

# Command to use when deplibs_check_method == file_magic.
file_magic_cmd="\$MAGIC_CMD"

# Flag that allows shared libraries with undefined symbols to be built.
allow_undefined_flag=""

# Flag that forces no undefined symbols.
no_undefined_flag=""

# Commands used to finish a libtool library installation in a directory.
finish_cmds="PATH=\\\"\\\$PATH:/sbin\\\" ldconfig -n \$libdir"

# Same as above, but a single script fragment to be evaled but not shown.
finish_eval=""

# Take the output of nm and produce a listing of raw symbols and C names.
global_symbol_pipe="sed -n -e 's/^.*[   ]\\([ABCDGIRSTW][ABCDGIRSTW]*\\)[       
][      ]*\\([_A-Za-z][_A-Za-z0-9]*\\)\$/\\1 \\2 \\2/p'"

# Transform the output of nm in a proper C declaration
global_symbol_to_cdecl="sed -n -e 's/^. .* \\(.*\\)\$/extern int \\1;/p'"

# Transform the output of nm in a C name address pair
global_symbol_to_c_name_address="sed -n -e 's/^: \\([^ ]*\\) \$/  {\\\"\\1\\\", 
(lt_ptr) 0},/p' -e 's/^[BCDEGRST] \\([^ ]*\\) \\([^ ]*\\)\$/  {\"\\2\", 
(lt_ptr) \\&\\2},/p'"

# This is the shared library runtime path variable.
runpath_var=LD_RUN_PATH

# This is the shared library path variable.
shlibpath_var=LD_LIBRARY_PATH

# Is shlibpath searched before the hard-coded library search path?
shlibpath_overrides_runpath=no

# How to hardcode a shared library path into an executable.
hardcode_action=immediate

# Whether we should hardcode library paths into libraries.
hardcode_into_libs=yes

# Flag to hardcode $libdir into a binary during linking.
# This must work even if $libdir does not exist.
hardcode_libdir_flag_spec="\${wl}--rpath \${wl}\$libdir"

# If ld is used when linking, flag to hardcode $libdir into
# a binary during linking. This must work even if $libdir does
# not exist.
hardcode_libdir_flag_spec_ld=""

# Whether we need a single -rpath flag with a separated argument.
hardcode_libdir_separator=""

# Set to yes if using DIR/libNAME during linking hardcodes DIR into the
# resulting binary.
hardcode_direct=no

# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
# resulting binary.
hardcode_minus_L=no

# Set to yes if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into
# the resulting binary.
hardcode_shlibpath_var=unsupported

# Set to yes if building a shared library automatically hardcodes DIR into the 
library
# and all subsequent libraries and executables linked against it.
hardcode_automatic=no

# Variables whose values should be saved in libtool wrapper scripts and
# restored at relink time.
variables_saved_for_relink="PATH  LD_RUN_PATH GCC_EXEC_PREFIX COMPILER_PATH 
LIBRARY_PATH"

# Whether libtool must link a program against all its dependency libraries.
link_all_deplibs=unknown

# Compile-time system search path for libraries
sys_lib_search_path_spec=" 
/Users/hanwen/src/gub/target/linux/system/usr/cross/bin/../lib/gcc/i686-linux/4.0.2/
 /Users/hanwen/src/gub/target/linux/system/usr/cross/bin/../lib/gcc/ 
/Users/hanwen/src/gub/target/linux/system/usr/cross//lib/gcc/i686-linux/4.0.2/ 
/usr/lib/gcc/i686-linux/4.0.2/ 
/Users/hanwen/src/gub/target/linux/system/usr/cross/bin/../lib/gcc/i686-linux/4.0.2/../../../../i686-linux/lib/i686-linux/4.0.2/
 
/Users/hanwen/src/gub/target/linux/system/usr/cross/bin/../lib/gcc/i686-linux/4.0.2/../../../../i686-linux/lib/
 
/Users/hanwen/src/gub/target/linux/system/usr/cross//lib/gcc/i686-linux/4.0.2/../../../../i686-linux/lib/i686-linux/4.0.2/
 
/Users/hanwen/src/gub/target/linux/system/usr/cross//lib/gcc/i686-linux/4.0.2/../../../../i686-linux/lib/
 /Users/hanwen/src/gub/target/linux/system//lib/i686-linux/4.0.2/ 
/Users/hanwen/src/gub/target/linux/system//lib/ 
/Users/hanwen/src/gub/target/linux/system//usr/lib/i686-linux/4.0.2/ 
/Users/hanwen/src/gub/target/linux/system//usr/lib/"

# Run-time system search path for libraries
sys_lib_dlsearch_path_spec="/lib /usr/lib"

# Fix the shell variable $srcfile for the compiler.
fix_srcfile_path=""

# Set to yes if exported symbols are required.
always_export_symbols=no

# The commands to list exported symbols.
export_symbols_cmds="\$NM \$libobjs \$convenience | \$global_symbol_pipe | 
\$SED 's/.* //' | sort | uniq > \$export_symbols"

# The commands to extract the exported symbol list from a shared archive.
extract_expsyms_cmds=""

# Symbols that should not be listed in the preloaded symbols.
exclude_expsyms="_GLOBAL_OFFSET_TABLE_"

# Symbols that must always be exported.
include_expsyms=""


reply via email to

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