Skip to content

Instantly share code, notes, and snippets.

@jgalar
Last active December 18, 2015 01:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jgalar/5706595 to your computer and use it in GitHub Desktop.
Save jgalar/5706595 to your computer and use it in GitHub Desktop.
Example of compiling a C++ application and linking against providers compiled as C shared objects.
/*
* Copyright (C) 2009 Pierre-Marc Fournier
* Copyright (C) 2011 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; version 2.1 of
* the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <signal.h>
#include <string.h>
#include <arpa/inet.h>
#include <stdlib.h>
#define TRACEPOINT_DEFINE
#define TRACEPOINT_PROBE_DYNAMIC_LINKAGE
#include "ust_tests_demo.h"
#include "ust_tests_demo2.h"
#include "ust_tests_demo3.h"
class CPPTest
{
public:
CPPTest() { somethingToCheckItBuilds = 42; }
void test() { printf("Hello from CPP application!\n"); }
private:
int somethingToCheckItBuilds;
};
int main(int argc, char **argv)
{
int i, netint;
long values[] = { 1, 2, 3 };
char text[10] = "test";
double dbl = 2.0;
float flt = 2222.0;
int delay = 0;
CPPTest it_works;
it_works.test();
if (argc == 2)
delay = atoi(argv[1]);
fprintf(stderr, "Demo program starting.\n");
sleep(delay);
fprintf(stderr, "Tracing... ");
tracepoint(ust_tests_demo, starting, 123);
for (i = 0; i < 5; i++) {
netint = htonl(i);
tracepoint(ust_tests_demo2, loop, i, netint, values,
text, strlen(text), dbl, flt);
}
tracepoint(ust_tests_demo, done, 456);
tracepoint(ust_tests_demo3, done, 42);
fprintf(stderr, " done.\n");
return 0;
}
# Copyright (C) 2013 Jérémie Galarneau <jeremie.galarneau@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 users may see how to build
# a program with tracepoint provider probes as stand-alone shared objects.
CC = gcc
LIBS = -ldl # On Linux
#LIBS = -lc # On BSD
LOCAL_CPPFLAGS += -I.
# Only necessary when building from the source tree and lttng-ust is not
# installed
ifdef BUILD_EXAMPLES_FROM_TREE
LOCAL_CPPFLAGS += -I../../../include/
LIBLTTNG_UST_PATH = ../../../liblttng-ust/.libs/
override LDFLAGS += -L$(LIBLTTNG_UST_PATH) -Wl,-rpath='$$ORIGIN/$(LIBLTTNG_UST_PATH)'
# Third-party Makefiles have to define these targets to integrate with an
# automake project
EMPTY_AUTOMAKE_TARGETS = distdir install install-data install-exec uninstall \
install-dvi install-html install-info install-ps install-pdf \
installdirs check installcheck mostlyclean distclean maintainer-clean \
dvi html pdf ps info tags ctags
.PHONY: $(EMPTY_AUTOMAKE_TARGETS)
$(EMPTY_AUTOMAKE_TARGETS):
endif
all: demo lttng-ust-provider-ust-tests-demo.so lttng-ust-provider-ust-tests-demo3.so
tp.o: tp.c ust_tests_demo.h
$(CC) $(CPPFLAGS) $(LOCAL_CPPFLAGS) $(CFLAGS) -fpic -c -o $@ $<
tp2.o: tp2.c ust_tests_demo2.h
$(CC) $(CPPFLAGS) $(LOCAL_CPPFLAGS) $(CFLAGS) -fpic -c -o $@ $<
lttng-ust-provider-ust-tests-demo.so: tp.o tp2.o
$(CC) -shared -o $@ $(LDFLAGS) -llttng-ust $^
tp3.o: tp3.c ust_tests_demo3.h
$(CC) $(CPPFLAGS) $(LOCAL_CPPFLAGS) $(CFLAGS) -fpic -c -o $@ $<
lttng-ust-provider-ust-tests-demo3.so: tp3.o
$(CC) -shared -o $@ $(LDFLAGS) -llttng-ust $^
demo.o: demo.cpp
g++ $(CPPFLAGS) $(CFLAGS) -c -o $@ $<
demo: demo.o lttng-ust-provider-ust-tests-demo3.so
g++ -o $@ $^ -L. $(LIBS) -Wl,-rpath=.
.PHONY: clean
clean:
rm -f *.o *.so demo
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment