Я пытаюсь собрать https://github.com/iovisor/bpftrace.git на Ubuntu 18.04. Я собрал и установил его зависимость bcc
вручную (документы сборки репозитория bpftrace предполагают, что в упакованной версии ubuntu отсутствуют необходимые заголовочные файлы).
Я обнаружил, что cmake будет жаловаться на меня следующим образом:
-- Looking for bcc_prog_load - not found
После некоторых CMakeLists.txt
изменений, чтобы убедиться, что подходящие -I
флаги переданы, и, глядя в CMakeFiles/CMakeError.log
, я вижу, что сборка завершается неудачно, как это:
/usr/bin/cc -I/home/me/dev/bcc/src/cc -I/home/me/dev/bcc/src/cc/libbpf/src -o CMakeFiles/cmTC_653d8.dir/CheckSymbolExists.c.o -c /home/me/dev/bpftrace/build/CMakeFiles/CMakeTmp/CheckSymbolExists.c
Linking C executable cmTC_653d8
/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_653d8.dir/link.txt --verbose=1
/usr/bin/cc -rdynamic CMakeFiles/cmTC_653d8.dir/CheckSymbolExists.c.o -o cmTC_653d8 -lbcc
CMakeFiles/cmTC_653d8.dir/CheckSymbolExists.c.o: In function `main':
CheckSymbolExists.c:(.text+0x1b): undefined reference to `pthread_create'
collect2: error: ld returned 1 exit status
Если я запускаю с --debug-trycompile
и вручную запускаю ошибочные команды, я вижу, что передача параметра командной строки -pthread
в gcc исправляет эту ошибку. Из этого ответа Я предполагаю, что что-то вроде следующего должно исправить это:
set(THREADS_PREFER_PTHREAD_FLAG ON)
find_package(Threads REQUIRED)
target_link_libraries(my_app Threads::Threads)
Однако то, что здесь не удается, это не какая-то цель, которую я добавил, а просто проверка на наличие символа:
check_symbol_exists(bcc_prog_load "libbpf.h" HAVE_BCC_PROG_LOAD)
Поэтому я не знаю, как указать цель для target_link_libraries
. Я попытался заменить target_link_libraries
на link_libraries
(отбрасывая первый аргумент my_app
), но это не заставляет CMake передавать аргумент -pthread
в gcc при проверке на наличие символа.
Что я могу сделать, чтобы check_symbol_exists
заработал?