как создать приложение с помощью статических пробников в dtrace userland с помощью cmake

У меня есть серверное приложение на FreeBSD, написанное на C ++, и я хочу добавить dtrace usdt в этом. Для правильной сборки зонды USDT требуют dtrace -G команда для запуска на всех объектных файлах, которые содержат зонды. Затем он генерирует объектный файл, содержащий некоторые функции dtrace, и приложение должно быть связано с ним. Я смог запустить dtrace таким образом, добавив пользовательскую команду с флагом PRE_LINK к моей цели:

add_executable(foo foo.cpp)
target_link_libraries(foo ${foo_libs})
add_custom_command(
TARGET foo
PRE_LINK
COMMAND dtrace -G -s ${DTRACE_PROVIDER}
${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/*.o
-o provider.o
)

Чем мне нужно каким-то образом связать файлr.r со своим исполняемым файлом, но я понятия не имею, как это сделать, если добавить его в качестве зависимости к foo:

add_executable(foo foo.cpp)
target_link_libraries(foo ${foo_libs} provider.o)

сборка завершается неудачно, пока не будет создан файлr.r. Добавление другой поддельной цели — это не вариант, потому что это выглядит (документация действительно плохая). Dtrace также должен быть запущен для объектного файла, который содержит main, или он не сможет зарегистрировать свои зонды в системе при запуске приложения. Есть идеи как это сделать? Или, возможно, можно добавить зонды sdt без исправления объектных файлов?

Обновить:

[ 84%] Building CXX object proxy/CMakeFiles/proxy-lib.dir/src/Server.cpp.o
cd /home/pablo/engine/Debug/proxy && /usr/bin/CC -DBOOST_LOG_DYN_LINK -DBOOST_LOG_USE_NATIVE_SYSLOG
-DLIBNET_LIL_ENDIAN -std=c++1y -march=native -mtune=native -Wall -pthread -fno-omit-frame-pointer
-ggdb3 -O0 -DDEBUG -I/home/pablo/engine/dependencies/asio/include
-I/usr/local/include -I/usr/local/include/mysql++ -I/usr/local/include/mysql -I/home/pablo/engine/Debug/UU4/proto
-I/home/pablo/engine/common -I/home/pablo/engine -I/home/pablo/engine/proxy/src -I/home/pablo/engine/proxy/test
-o CMakeFiles/proxy-lib.dir/src/Server.cpp.o -c /home/pablo/engine/proxy/src/Server.cpp
Linking CXX executable ../server
perform dtrace binary update on files in /home/pablo/engine/Debug/proxy/CMakeFiles/server.dir
cd /home/pablo/engine/Debug/proxy && rm /home/pablo/engine/Debug/proxy/CMakeFiles/server.dir/src/Provider.cpp.o || true
cd /home/pablo/engine/Debug/proxy && dtrace -G -s /home/pablo/engine/proxy/src/Provider.d
/home/pablo/engine/Debug/proxy/CMakeFiles/server.dir/*/*.cpp.o -o /home/pablo/engine/Debug/proxy/CMakeFiles/server.dir/src/Provider.cpp.o
cd /home/pablo/engine/Debug/proxy && /usr/local/bin/cmake -E cmake_link_script CMakeFiles/server.dir/link.txt --verbose=1
/usr/bin/CC   -std=c++1y -march=native -mtune=native -Wall -pthread -fno-omit-frame-pointer -ggdb3
-O0 -DDEBUG    CMakeFiles/server.dir/src/main.cpp.o CMakeFiles/server.dir/src/ConfigParser.cpp.o CMakeFiles/server.dir/src/Connection.cpp.o
CMakeFiles/server.dir/src/ConnectionManager.cpp.o CMakeFiles/server.dir/src/Delegate.cpp.o CMakeFiles/server.dir/src/Request.cpp.o CMakeFiles/server.dir/src/Provider.cpp.o
CMakeFiles/server.dir/src/Server.cpp.o  -o ../server  -L/usr/local/lib  ../common/libcommon.a ../proto/libproto.a -lpthread -ltbb /usr/local/lib/libboost_filesystem.so
/usr/local/lib/libboost_system.so /usr/local/lib/libboost_unit_test_framework.so /usr/local/lib/libboost_timer.so /usr/local/lib/libboost_program_options.so
/usr/local/lib/libboost_regex.so /usr/local/lib/libboost_thread.so /usr/local/lib/mysql/libmysqlclient.so /usr/local/lib/libmysqlpp.so /usr/local/lib/libprotobuf-lite.a
/usr/local/lib/libprotobuf.a /usr/local/lib/libsnappy.so /usr/local/lib/libevent.so -lelf -Wl,-rpath,/usr/local/lib:/usr/local/lib/mysql:

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]