Skip to content

Commit

Permalink
Detect and document dependency on -ldl on Linux, -lc on BSD for dlopen
Browse files Browse the repository at this point in the history
Signed-off-by: Mathieu Desnoyers <[email protected]>
  • Loading branch information
compudj committed Feb 22, 2012
1 parent bf24b00 commit c6c454a
Show file tree
Hide file tree
Showing 14 changed files with 90 additions and 14 deletions.
6 changes: 3 additions & 3 deletions README
Original file line number Diff line number Diff line change
Expand Up @@ -67,15 +67,15 @@ USAGE:
"TRACEPOINT_DEFINE" and include the tracepoint provider.
- Use "-I." for the compilation unit containing the tracepoint
provider include (e.g. tp.c).
- Link application with "-ldl".
- Link application with "-ldl" on Linux, with "-lc" on BSD.
- If building the provider directly into the application,
link the application with "-llttng-ust".
- If building a static library for the provider, link the static
library with "-lllttng-ust".
- Include the tracepoint provider header into all C files using
the provider.
- Example:
tests/hello/ hello.c tp.c ust_tests_hello.h Makefile.example
tests/hello/ hello.c tp.c ust_tests_hello.h Makefile.example.*

2) Compile the Tracepoint Provider separately from the application,
using dynamic linking:
Expand All @@ -87,7 +87,7 @@ USAGE:
files that use the provider.
- Compile the tracepoint provider with "-I.".
- Link the tracepoint provider with "-llttng-ust".
- Link application with "-ldl".
- Link application with "-ldl" on Linux, "-lc" on BSD.
- Set a LD_PRELOAD environment to preload the tracepoint provider
shared object before starting the application when tracing is
needed.
Expand Down
20 changes: 18 additions & 2 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,23 @@ AC_PROG_MAKE_SET
LT_INIT

## Checks for libraries.
AC_CHECK_LIB([dl], [dlopen])
AC_CHECK_LIB([dl], [dlopen],
[
have_libdl=yes
],
[
#libdl not found, check for dlopen in libc.
AC_CHECK_LIB([c], [dlopen],
[
have_libc_dl=yes
],
[
AC_MSG_ERROR([Cannot find dlopen in libdl nor libc. Use [LDFLAGS]=-Ldir to specify their location.])
])
])
AM_CONDITIONAL([LTTNG_UST_BUILD_WITH_LIBDL], [test "x$have_libdl" = "xyes"])
AM_CONDITIONAL([LTTNG_UST_BUILD_WITH_LIBC_DL], [test "x$have_libc_dl" = "xyes"])

AC_CHECK_LIB([pthread], [pthread_create])

# Check for libuuid
Expand All @@ -59,7 +75,7 @@ AC_CHECK_LIB([uuid], [uuid_generate],
have_libc_uuid=yes
],
[
AC_MSG_ERROR([Cannot find libuuid uuid_generate nor libc uuid_create. Use [LDFLAGS]=-Ldir to specify its location.])
AC_MSG_ERROR([Cannot find libuuid uuid_generate nor libc uuid_create. Use [LDFLAGS]=-Ldir to specify their location.])
])
]
)
Expand Down
3 changes: 2 additions & 1 deletion doc/examples/easy-ust/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,8 @@
# the "html" target helps for documentation (req. code2html)

CC = gcc
LIBS = -ldl -llttng-ust
LIBS = -ldl -llttng-ust # On Linux
#LIBS = -lc -llttng-ust # On BSD
CFLAGS = -I.

all: sample
Expand Down
4 changes: 3 additions & 1 deletion doc/examples/gen-tp/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@
# provider probe.

CC = gcc
LIBS = -ldl -llttng-ust

LIBS = -ldl -llttng-ust #On Linux
#LIBS = -lc -llttng-ust #On BSD

all: sample

Expand Down
9 changes: 8 additions & 1 deletion liblttng-ust-fork/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@ AM_CFLAGS = -fno-strict-aliasing
lib_LTLIBRARIES = liblttng-ust-fork.la
liblttng_ust_fork_la_SOURCES = ustfork.c
liblttng_ust_fork_la_LIBADD = \
-ldl \
$(top_builddir)/liblttng-ust/liblttng-ust.la

if LTTNG_UST_BUILD_WITH_LIBDL
liblttng_ust_fork_la_LIBADD += -ldl
endif
if LTTNG_UST_BUILD_WITH_LIBC_DL
liblttng_ust_fork_la_LIBADD += -lc
endif

libustfork_CFLAGS = -DUST_COMPONENT=liblttng-ust-fork -fno-strict-aliasing
9 changes: 8 additions & 1 deletion liblttng-ust-libc-wrapper/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,16 @@ lib_LTLIBRARIES = liblttng-ust-libc-wrapper.la
liblttng_ust_libc_wrapper_la_SOURCES = \
lttng-ust-malloc.c \
ust_libc.h
liblttng_ust_libc_wrapper_la_LIBADD = -ldl \
liblttng_ust_libc_wrapper_la_LIBADD = \
-L$(top_builddir)/liblttng-ust/.libs \
-llttng-ust

if LTTNG_UST_BUILD_WITH_LIBDL
liblttng_ust_libc_wrapper_la_LIBADD += -ldl
endif
if LTTNG_UST_BUILD_WITH_LIBC_DL
liblttng_ust_libc_wrapper_la_LIBADD += -lc
endif

noinst_SCRIPTS = run
EXTRA_DIST = run
10 changes: 8 additions & 2 deletions tests/demo/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,11 @@ liblttng_ust_provider_ust_tests_demo3_la_LDFLAGS = \

noinst_PROGRAMS = demo
demo_SOURCES = demo.c ust_tests_demo.h
# The demo program only depends on libdl.
demo_LDFLAGS = -ldl
# The demo program only depends on libdl/libc for dlopen().
if LTTNG_UST_BUILD_WITH_LIBDL
demo_LDADD = -ldl
endif
if LTTNG_UST_BUILD_WITH_LIBC_DL
demo_LDADD = -lc
endif

3 changes: 2 additions & 1 deletion tests/demo/README
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@ demo-trace shell script preloads the provider shared objects before
executing the demo. Executing "demo" without the shell wrapper will not
provide any tracing support. This ensures the demo binary can be
distributed on distros without depending on having liblttng-ust.so in
place. Note: the "demo" program must be compiled with "-ldl".
place. Note: the "demo" program must be compiled with "-ldl" on Linux,
with "-lc" on BSD.

The simplest command to trace the demo program are:
lttng create
Expand Down
9 changes: 8 additions & 1 deletion tests/dlopen/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,14 @@ libdummy_la_SOURCES = libdummy.c
libdummy_la_LIBADD = $(top_builddir)/libust/libust.la $(top_builddir)/libust-initializer.o
libdummy_la_LDFLAGS = -rpath /nowhere
dlopen_SOURCES = dlopen.c
dlopen_LDADD = -ldl $(top_builddir)/libust/libust.la $(top_builddir)/libust-initializer.o
dlopen_LDADD = $(top_builddir)/libust/libust.la $(top_builddir)/libust-initializer.o

if LTTNG_UST_BUILD_WITH_LIBDL
dlopen_LDADD += -ldl
endif
if LTTNG_UST_BUILD_WITH_LIBC_DL
dlopen_LDADD += -lc
endif

noinst_SCRIPTS = run
EXTRA_DIST = run
9 changes: 8 additions & 1 deletion tests/hello-static-lib/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,14 @@ liblttng_ust_provider_ust_test_hello_la_LIBADD = \

noinst_PROGRAMS = hello
hello_SOURCES = hello.c
hello_LDADD = -ldl liblttng-ust-provider-ust-test-hello.la
hello_LDADD = liblttng-ust-provider-ust-test-hello.la

if LTTNG_UST_BUILD_WITH_LIBDL
hello_LDADD += -ldl
endif
if LTTNG_UST_BUILD_WITH_LIBC_DL
hello_LDADD += -lc
endif

noinst_SCRIPTS = run
EXTRA_DIST = run
7 changes: 7 additions & 0 deletions tests/hello.cxx/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,12 @@ noinst_PROGRAMS = hello
hello_SOURCES = hello.cpp tp.c ust_tests_hello.h
hello_LDADD = $(top_builddir)/liblttng-ust/liblttng-ust.la

if LTTNG_UST_BUILD_WITH_LIBDL
hello_LDADD += -ldl
endif
if LTTNG_UST_BUILD_WITH_LIBC_DL
hello_LDADD += -lc
endif

noinst_SCRIPTS = run
EXTRA_DIST = run
7 changes: 7 additions & 0 deletions tests/hello/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,12 @@ noinst_PROGRAMS = hello
hello_SOURCES = hello.c tp.c ust_tests_hello.h
hello_LDADD = $(top_builddir)/liblttng-ust/liblttng-ust.la

if LTTNG_UST_BUILD_WITH_LIBDL
hello_LDADD += -ldl
endif
if LTTNG_UST_BUILD_WITH_LIBC_DL
hello_LDADD += -lc
endif

noinst_SCRIPTS = run
EXTRA_DIST = run
8 changes: 8 additions & 0 deletions tests/hello/Makefile.example.bsd
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# Example makefile for build outside of the LTTng-UST tree.

hello:
${CC} -O2 -I. -o hello -lc -llttng-ust hello.c tp.c

.PHONY: clean
clean:
rm -f hello
File renamed without changes.

0 comments on commit c6c454a

Please sign in to comment.