[lttng-dev] Updated easy-ust Makefile

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Fri May 10 10:25:35 EDT 2013


Evey problem related to your distribution not having /usr/local/lib in
ld.so.conf by default should be handled by adding documentation to the
project, not modifying makefiles.

Jeremie will take care of adding this info to the documentation.

Thanks,

Mathieu

* Thibault, Daniel (Daniel.Thibault at drdc-rddc.gc.ca) wrote:
>    In my previous note on this mailing list, forget the bit about LD_PRELOAD being beholden to the remaining library search.  I got fooled into thinking that for unrelated reasons.  Turns out LD_PRELOAD loads the so regardless of the search's outcome: it's just added to the list of dependencies to load (traversal is breadth-first, it turns out), and its initializer called last.
> 
>    Here is a suggested updated lttng-ust/doc/examples/easy-ust/Makefile which fixes a minor problem (missing LDFLAGS preventing make from succeeding out-of-the-box) and adds additional targets demonstrating other ways tracepoints can be compiled into an application.  Please review this for any factual errors.
> 
> - - - BEGIN - - -
> # Copyright (C) 2011-2012  Matthew Khouzam <matthew.khouzam at ericsson.com> 
> # Copyright (C) 2012  Mathieu Desnoyers <mathieu.desnoyers at efficios.com>
> #
> # THIS MATERIAL IS PROVIDED AS IS, WITH ABSOLUTELY NO WARRANTY EXPRESSED
> # OR IMPLIED.  ANY USE IS AT YOUR OWN RISK.
> #
> # Permission is hereby granted to use or copy this program for any
> # purpose,  provided the above notices are retained on all copies.
> # Permission to modify the code and to distribute modified code is
> # granted, provided the above notices are retained, and a notice that
> # the code was modified is included with the above copyright notice.
> #
> # This makefile is not using automake so that people can see how to make
> # simply. It builds a sample program in any one of four (really three) ways:
> #
> # ("static", default) with a statically embedded tracepoint provider probe,
> # through inclusion.
> #
> # ("staticlib") with a statically embedded tracepoint provider probe, through
> # a static library (libtp.a). The resulting samplestaticlib binary is identical
> # to the samplestatic binary.
> #
> # ("dynamic", "dynamicfull") with a dynamically loaded shared library
> # (libtp.so). The only difference between these two is that "dynamicfull" sets
> # the TRACEPOINT_PROBE_DYNAMIC_LINKAGE define in order to avoid needing to be
> # linked statically with the shared library.
> #
> # Currently, an instrumented application that would use a dynamically linked
> # (as opposed to dynamically loaded) tracepoint provider shared library would
> # still dynamically load it (using the dlopen() system call), so the difference
> # is pointless.
> #
> # The dynamic samples must use LD_PRELOAD to run because the trace provider
> # shared library (libtp.so) is not in the library search path; to obviate this
> # requirement, you can either install your trace provider shared library in
> # the library search path (e.g. /usr/local/lib) or add a DT_RUNPATH tag to your
> # sample so it looks in its own directory for missing libraries (look for the
> # commented-out "$(CC) ... -Wl,-rpath,\$ORIGIN,--enable-new-dtags" lines in
> # the "dynamic" and "dynamicfull" targets). The latter option does have the
> # disadvantage that the dynamic linker will look for all the required libraries
> # (libdl.so, libc.so, liblttng-ust.so, etc.) in sample's directory first.
> #
> # The "html" target helps for documentation (req. code2html).
> 
> AR = ar
> CC = gcc
> LIBS = -ldl -llttng-ust # On Linux
> #LIBS = -lc -llttng-ust # On BSD
> CFLAGS = -I.
> LDFLAGS = -L/usr/local/lib
> SOFLAGS = -fPIC
> SOVERSION_MAJOR = 1
> SOVERSION_MINOR = 0
> 
> # default make is "all"
> all: static
> 
> static: sample.o tp.o
> 	$(CC) -o sample$@ $^ $(LDFLAGS) $(LIBS)
> 	@echo "   Use './sample$@' to run sample$@"
> 
> staticlib: sample.o libtp.a
> 	$(CC) -o sample$@ $^ $(LDFLAGS) $(LIBS) -L.
> 	@echo "   Use './sample$@' to run sample$@"
> 
> dynamic: sample.o libtp.so
> #	$(CC) -o sample$@ $< $(LDFLAGS) $(LIBS) -L. -ltp \
> #	   -Wl,-rpath,\$ORIGIN,--enable-new-dtags
> 	$(CC) -o sample$@ $< $(LDFLAGS) $(LIBS) -L. -ltp
> 	@echo "   Use 'LD_PRELOAD=./libtp.so ./sample$@' to run sample$@"
> 
> dynamicfull: sampledynamic.o libtp.so
> #	$(CC) -o sample$@ $< $(LDFLAGS) $(LIBS) \
> #	   -Wl,-rpath,\$ORIGIN,--enable-new-dtags
> 	$(CC) -o sample$@ $< $(LDFLAGS) $(LIBS)
> 	@echo "   Use 'LD_PRELOAD=./libtp.so ./sample$@' to run sample$@"
> 
> sample.o: sample.c sample_component_provider.h
> 	$(CC) $(CFLAGS) -c -o $@ $<
> 
> sampledynamic.o: sample.c sample_component_provider.h
> 	$(CC) $(CFLAGS) -D TRACEPOINT_PROBE_DYNAMIC_LINKAGE -c -o $@ $<
> 
> libtp.a: tp.o
> 	$(AR) -cq $@ $<
> 
> libtp.so: libtp.o
> 	$(CC) -shared -Wl,-soname,$@.$(SOVERSION_MAJOR) -o \
> 	   $@.$(SOVERSION_MAJOR).$(SOVERSION_MINOR) $(LDFLAGS) $(LIBS) $<
> 	ln -sf $@.$(SOVERSION_MAJOR).$(SOVERSION_MINOR) $@.$(SOVERSION_MAJOR)
> 	ln -sf $@.$(SOVERSION_MAJOR) $@
> 
> libtp.o: tp.c sample_component_provider.h
> 	$(CC) $(CFLAGS) $(SOFLAGS) -c -o $@ $<
> 
> tp.o: tp.c sample_component_provider.h
> 	$(CC) $(CFLAGS) -c -o $@ $<
> 
> html: sample_component_provider.html sample.html tp.html
> 
> %.html: %.c 
> 	code2html -lc $< $@
> 
> %.html : %.h
> 	code2html -lc $< $@
> 
> .PHONY: clean
> clean:
> 	rm -f *.html
> 	rm -f *.o *.a *.so *.so.*
> 	rm -f samplestatic* sampledynamic*
> - - - END - - -
> 
> Daniel U. Thibault
> R & D pour la défense Canada - Valcartier (RDDC Valcartier) / Defence R&D Canada - Valcartier (DRDC Valcartier)
> Cyber sécurité pour les missions essentielles (CME) / Mission Critical Cyber Security (MCCS)
> Protection des systèmes et contremesures (PSC) / Systems Protection & Countermeasures (SPC)
> 2459 route de la Bravoure
> Québec, QC  G3J 1X5
> CANADA
> Vox : (418) 844-4000 x4245
> Fax : (418) 844-4538
> NAC : 918V QSDJ <http://www.travelgis.com/map.asp?addr=918V%20QSDJ>
> Gouvernement du Canada / Government of Canada
> <http://www.valcartier.drdc-rddc.gc.ca/>
> 
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com



More information about the lttng-dev mailing list