libtool
[Top][All Lists]
Advanced

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

Re: Problem with deplibs


From: Bruno Barberi Gnecco
Subject: Re: Problem with deplibs
Date: Tue, 16 Nov 2010 11:04:45 -0200
User-agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.1.8) Gecko/20100305 Thunderbird/3.0.3

Hi Ralf,

* Bruno Barberi Gnecco wrote on Tue, Nov 09, 2010 at 08:47:08PM CET:
        I'm facing a problem compiling a library with libtool (via
automake/autoconf). It depends on OpenCV, and deplibs links against
all indirect libraries as well (that is, it adds the libs such as
"/usr/lib64/libhighgui.so /usr/lib64/libgthread-2.0.so
/usr/lib64/libgtk-x11-2.0.so /usr/lib64/libgdk-x11-2.0.so").

        For some reason this breaks the application (don't ask me why, the
cameras just stop working). All I need is to link only against the
libraries I specify. I though "link_all_deplibs=no" in configure.in
would achieve this, but it has no effect at all.

You need to provide more information for us to be able to help.

If I were you, I'd start trying to find out why additional DT_NEEDED
entries would break an application.  That usually only happens because
incompatible library versions, or even multiple versions of a library,
are linked in.  Looking at make output, esp. the libtool --mode=link
commands and all output they generate, can help here.

The problem is caused specifically by OpenCV and cameras. I'm not sure why; if libraries are loaded with dlopen by opencv and loading them twice breaks something, or if it is incompatibility between multiple versions of libraries. I've ran into this before and in many computers, and I could never find out why. There's no segfault, only a NULL pointer is returned instead of an image.

In order to judge whether link_all_deplibs=no works or not, we'd need to
see, in addition to said build output, probably also the contents of the
created .la file, plus that of the .la files that belong to libraries
that are linked in.  This data is usually contained in the output of the
--mode=link command with --debug added as first libtool argument (gzip
large outputs).

        Build output, just the end of it:

/bin/sh ../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. `pkg-config --cflags opencv` -I../include -g -DDEBUG -Wall -I../src2 -D_REENTRANT -Wall -Wno-deprecated -MT feature.lo -MD -MP -MF .deps/feature.Tpo -c -o feature.lo feature.cpp libtool: compile: g++ -DHAVE_CONFIG_H -I. -I/usr/include/opencv -I../include -g -DDEBUG -Wall -I../src2 -D_REENTRANT -Wall -Wno-deprecated -MT feature.lo -MD -MP -MF .deps/feature.Tpo -c feature.cpp -fPIC -DPIC -o .libs/feature.o libtool: compile: g++ -DHAVE_CONFIG_H -I. -I/usr/include/opencv -I../include -g -DDEBUG -Wall -I../src2 -D_REENTRANT -Wall -Wno-deprecated -MT feature.lo -MD -MP -MF .deps/feature.Tpo -c feature.cpp -o feature.o >/dev/null 2>&1
mv -f .deps/feature.Tpo .deps/feature.Plo
/bin/sh ../libtool --tag=CC --mode=link g++ -I../include -g -DDEBUG -Wall -I../src2 -D_REENTRANT -Wall -Wno-deprecated -lcv -lhighgui -lcvaux -lml -lcxcore -o libskamleton.la -rpath /usr/local/lib camera.lo debug.lo feature.lo framedata.lo hanim.lo image.lo log.lo plugin.lo skamleton.lo camera_image.lo camera_opencv.lo debug_opencv.lo bgs.lo bgs_nhd.lo -lgsl -lgslcblas -lm libtool: link: rm -fr .libs/libskamleton.a .libs/libskamleton.la .libs/libskamleton.lai .libs/libskamleton.so .libs/libskamleton.so.0 .libs/libskamleton.so.0.0.0 libtool: link: gcc -shared .libs/camera.o .libs/debug.o .libs/feature.o .libs/framedata.o .libs/hanim.o .libs/image.o .libs/log.o .libs/plugin.o .libs/skamleton.o .libs/camera_image.o .libs/camera_opencv.o .libs/debug_opencv.o .libs/bgs.o .libs/bgs_nhd.o -Wl,-rpath -Wl,/usr/lib64 -Wl,-rpath -Wl,/usr/lib64/../lib64 -Wl,-rpath -Wl,/usr/lib64 -Wl,-rpath -Wl,/usr/lib64/../lib64 -L/usr/lib64 /usr/lib64/libhighgui.so /usr/lib64/libgthread-2.0.so /usr/lib64/libgtk-x11-2.0.so /usr/lib64/libgdk-x11-2.0.so /usr/lib64/libatk-1.0.so /usr/lib64/libpangocairo-1.0.so /usr/lib64/libcairo.so /usr/lib64/libpixman-1.so /usr/lib64/libXrender.so /usr/lib64/libX11.so /usr/lib64/libxcb.so /usr/lib64/libXau.so /usr/lib64/libXdmcp.so /usr/lib64/libgdk_pixbuf-2.0.so /usr/lib64/libgio-2.0.so /usr/lib64/libtiff.so /usr/lib64/libjasper.so /usr/lib64/libjpeg.so -lswscale /usr/lib64/libdc1394.so /usr/lib64/libraw1394.so /usr/lib64/libxine.so -lresolv -lnsl /usr/lib64/libucil.so /usr/lib64/libtheora.so /usr/lib64/libvorbisenc.so /usr/lib64/libvorbis.so /usr/lib64/libogg.so /usr/lib64/libasound.so -lpng12 /usr/lib64/libunicap.so /usr/lib64/libpangoft2-1.0.so /usr/lib64/libpango-1.0.so /usr/lib64/libfontconfig.so /usr/lib64/libfreetype.so /usr/lib64/libexpat.so /usr/lib64/libgobject-2.0.so /usr/lib64/libgmodule-2.0.so /usr/lib64/libglib-2.0.so /usr/lib64/libcvaux.so /usr/lib64/libcv.so /usr/lib64/libml.so /usr/lib64/libcxcore.so -lavformat -lavcodec -lrt -lz -lpthread -ldl /usr/lib64/../lib64/libstdc++.so /usr/lib64/libgsl.so /usr/lib64/libgslcblas.so -lm -pthread -Wl,-soname -Wl,libskamleton.so.0 -o .libs/libskamleton.so.0.0.0 libtool: link: (cd ".libs" && rm -f "libskamleton.so.0" && ln -s "libskamleton.so.0.0.0" "libskamleton.so.0") libtool: link: (cd ".libs" && rm -f "libskamleton.so" && ln -s "libskamleton.so.0.0.0" "libskamleton.so") libtool: link: ar cru .libs/libskamleton.a camera.o debug.o feature.o framedata.o hanim.o image.o log.o plugin.o skamleton.o camera_image.o camera_opencv.o debug_opencv.o bgs.o bgs_nhd.o
libtool: link: ranlib .libs/libskamleton.a
libtool: link: ( cd ".libs" && rm -f "libskamleton.la" && ln -s "../libskamleton.la" "libskamleton.la" )

From libskamleton.la, the dependency_libs line. Are you sure you need all these .las? It'd be a long email.

# Libraries that this one depends upon.
dependency_libs=' -L/usr/lib64 /usr/lib64/libhighgui.la /usr/lib64/libgthread-2.0.la /usr/lib64/libgtk-x11-2.0.la /usr/lib64/libgdk-x11-2.0.la /usr/lib64/libatk-1.0.la /usr/lib64/libpangocairo-1.0.la /usr/lib64/libcairo.la /usr/lib64/libpixman-1.la /usr/lib64/libXrender.la /usr/lib64/libX11.la /usr/lib64/libxcb.la /usr/lib64/libXau.la /usr/lib64/libXdmcp.la /usr/lib64/libgdk_pixbuf-2.0.la /usr/lib64/libgio-2.0.la /usr/lib64/libtiff.la -lc /usr/lib64/libjasper.la -ljpeg /usr/lib64/libjpeg.la -lswscale /usr/lib64/libdc1394.la /usr/lib64/libraw1394.la /usr/lib64/libxine.la -lresolv -lnsl /usr/lib64/libucil.la /usr/lib64/libtheora.la /usr/lib64/libvorbisenc.la /usr/lib64/libvorbis.la /usr/lib64/libogg.la /usr/lib64/libasound.la -lpng12 /usr/lib64/libunicap.la /usr/lib64/libpangoft2-1.0.la /usr/lib64/libpango-1.0.la /usr/lib64/libfontconfig.la /usr/lib64/libfreetype.la /usr/lib64/libexpat.la /usr/lib64/libgobject-2.0.la /usr/lib64/libgmodule-2.0.la /usr/lib64/libglib-2.0.la /usr/lib64/libcvaux.la /usr/lib64/libcv.la /usr/lib64/libml.la /usr/lib64/libcxcore.la -lavformat -lavcodec -lrt -lz -lpthread -ldl /usr/lib64/../lib64/libstdc++.la /usr/lib64/libgsl.la /usr/lib64/libgslcblas.la -lm'


BTW, this is an open source project available at http://skamleton.sf.net (no releases yet, only the SVN).

Also, './libtool --config' output is usually helpful.

# Which release of libtool.m4 was used?
macro_version=2.2.6b
macro_revision=1.3017

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

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

# What type of objects to build.
pic_mode=default

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

# The host system.
host_alias=
host=x86_64-unknown-linux-gnu
host_os=linux-gnu

# The build system.
build_alias=
build=x86_64-unknown-linux-gnu
build_os=linux-gnu

# A sed program that does not truncate output.
SED="/usr/bin/sed"

# Sed that helps us avoid accidentally triggering echo(1) options like -n.
Xsed="$SED -e 1s/^X//"

# A grep program that handles long lines.
GREP="/usr/bin/grep"

# An ERE matcher.
EGREP="/usr/bin/grep -E"

# A literal string matcher.
FGREP="/usr/bin/grep -F"

# A BSD- or MS-compatible name lister.
NM="/usr/bin/nm -B"

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

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

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

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

# whether the shell understands "unset".
lt_unset=unset

# turn spaces into newlines.
SP2NL="tr \\040 \\012"

# turn newlines into spaces.
NL2SP="tr \\015\\012 \\040\\040"

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

# An object symbol dumper.
OBJDUMP="objdump"

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

# The archiver.
AR="ar"
AR_FLAGS="cru"

# A symbol stripping program.
STRIP="strip"

# Commands used to install an old-style archive.
RANLIB="ranlib"
old_postinstall_cmds="chmod 644 \$oldlib~\$RANLIB \$oldlib"
old_postuninstall_cmds=""

# A C compiler.
LTCC="gcc"

# LTCC compiler flags.
LTCFLAGS="-g -O2"

# 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/^T .* \\(.*\\)\$/extern int \\1();/p' -e 's/^[ABCDGIRSTW]* .* \\(.*\\)\$/extern char \\1;/p'"

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

# Transform the output of nm in a C name address pair when lib prefix is needed.
global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \\([^ ]*\\) \$/ {\\\"\\1\\\", (void *) 0},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\(lib[^ ]*\\)\$/ {\"\\2\", (void *) \\&\\2},/p' -e 's/^[ABCDGIRSTW]* \\([^ ]*\\) \\([^ ]*\\)\$/ {\"lib\\2\", (void *) \\&\\2},/p'"

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

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

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

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

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

# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
DSYMUTIL=""

# Tool to change global to local symbols on Mac OS X.
NMEDIT=""

# Tool to manipulate fat objects and archives on Mac OS X.
LIPO=""

# ldd/readelf like tool for Mach-O binaries on Mac OS X.
OTOOL=""

# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
OTOOL64=""

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

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

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

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

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

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

# Library versioning type.
version_type=linux

# Shared library runtime path variable.
runpath_var=LD_RUN_PATH

# Shared library path variable.
shlibpath_var=LD_LIBRARY_PATH

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

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

# Command to use after installation of a shared archive.
postinstall_cmds=""

# Command to use after uninstallation of a shared archive.
postuninstall_cmds=""

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

# As "finish_cmds", except a single script fragment to be evaled but
# not shown.
finish_eval=""

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

# Compile-time system search path for libraries.
sys_lib_search_path_spec="/usr/lib64/gcc/x86_64-slackware-linux/4.3.3 /usr/lib/gcc/x86_64-slackware-linux/4.3.3 /usr/lib64 /lib64 /usr/x86_64-slackware-linux/lib"

# Run-time system search path for libraries.
sys_lib_dlsearch_path_spec="/lib /usr/lib /usr/local/lib /usr/x86_64-slackware-linux/lib /usr/lib64/seamonkey /usr/local/lib64 "

# Whether dlopen is supported.
dlopen_support=unknown

# Whether dlopen of programs is supported.
dlopen_self=unknown

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

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


# The linker used to build libraries.
LD="/usr/x86_64-slackware-linux/bin/ld -m elf_x86_64"

# Commands used to build an old-style archive.
old_archive_cmds="\$AR \$AR_FLAGS \$oldlib\$oldobjs~\$RANLIB \$oldlib"

# A language specific compiler.
CC="gcc"

# Is the compiler the GNU compiler?
with_gcc=yes

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

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

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

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

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

# 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

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

# Whether the compiler copes with passing no objects directly.
compiler_needs_object="no"

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

# Commands used to build a loadable module if different from building
# a shared archive.
module_cmds=""
module_expsym_cmds=""

# Whether we are building with GNU ld or not.
with_gnu_ld="yes"

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

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

# 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${shared_ext} during linking hardcodes
# DIR into the resulting binary.
hardcode_direct=no

# Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
# DIR into the resulting binary and the resulting library dependency is
# "absolute",i.e impossible to change by setting ${shlibpath_var} if the
# library is relocated.
hardcode_direct_absolute=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

# Set to yes if linker adds runtime paths of dependent libraries
# to runtime path list.
inherit_rpath=no

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

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

# Symbols that should not be listed in the preloaded symbols.
exclude_expsyms="_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*"

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

# Commands necessary for linking programs (against libraries) with templates.
prelink_cmds=""

# Specify filename containing input files.
file_list_spec=""

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

# The directories searched by this compiler when creating a shared library.
compiler_lib_search_dirs=""

# Dependencies to place before and after the objects being linked to
# create a shared library.
predep_objects=""
postdep_objects=""
predeps=""
postdeps=""

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





reply via email to

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