[lttng-dev] lttng-ust, libtool and cross-compilation

Christian Babeux christian.babeux at efficios.com
Mon Jul 30 11:57:17 EDT 2012


Hi all,

When cross-compiling lttng-ust, some users might encounter an issue
regarding missing libraries like this one:

/usr/lib/gcc/powerpc-linux-gnu/4.4.5/../../../../powerpc-linux-gnu/bin/ld:
warning: liblttng-ust-tracepoint.so.0, needed by
../../liblttng-ust/.libs/liblttng-ust.so, not found (try using -rpath
or -rpath-link)
../../liblttng-ust/.libs/liblttng-ust.so: undefined reference to
`init_tracepoint'
../../liblttng-ust/.libs/liblttng-ust.so: undefined reference to
`__tracepoint_probe_unregister'
../../liblttng-ust/.libs/liblttng-ust.so: undefined reference to
`__tracepoint_probe_register'
../../liblttng-ust/.libs/liblttng-ust.so: undefined reference to
`exit_tracepoint'

After some digging, this issue seems to appear only in cross-compilation
setup, especially on Debian based system.

The lttng-ust libraries dependencies can be summarized as follow:

+-----------------+ -> liblttng-ust-tracepoint.so -> liburcu-bp.so
| liblttng-ust.so | -> liblttng-ust-runtime.so
+-----------------+ -> liblttng-ust-support.so    -> libringbuffer.so

The problem arise when linking libraries with indirect libraries dependencies.
Other project have had this issue in the past [1].

This "bug" is caused by an upstream modification in the libtool package
on Debian system [2]. The libtool "link_all_deplibs" flag is set to "no"
by default on linux targets (AFAIK, other distros set it to unknown).

This has the unfortunate consequence of breaking cross-compilation
builds because gnu-ld doesn't use rpath on cross-compilation targets.
Hence the undefined reference errors messages.

Here are some possible ways to handle this problematic situation:

1 - Cook our own libtool.m4 in the lttng-ust tree with the
    libtool link_all_deplibs flag set to 'unknown'.

    Pro: No action required on the user side.
    Con: Additional work for the maintainer to ensure that the proper
	 libtool.m4 is present in sources packages. Additionnal maintenance.

2 - Add explicit dependencies to indirect libraries in the appropriates
    Makefile.am (such as the ones found in tests/{hello, hello.cxx, fork}).

    Pro: No action required on the user side.
    Con: Tedious.

3 - Add a configure flag to detect bogus version of libtool and automagically
    fix it.

    Pro: Less maintenance.
    Con: Require user interaction when cross-compiling.

Other components of LTTng might be affected be the same issue.

Any thoughts or additional input is quite welcome!

Thanks,

Christian

[1] - https://lists.isc.org/pipermail/bind10-dev/2011-August/002535.html
[2] - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=297726



More information about the lttng-dev mailing list