[Top][All Lists]
[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=""
- linking source dir .la's links in build system libraries,
Han-Wen Nienhuys <=