CMake check_symbol_exists не работает из-за отсутствия -pthread - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь собрать 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 заработал?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...