CMake check_symbol_exists由于缺少-pthread

时间:2019-03-31 22:09:10

标签: c++ ubuntu cmake pthreads

我正在尝试在Ubuntu 18.04上构建https://github.com/iovisor/bpftrace.git。我手动构建并安装了其依赖项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可以修复该错误。我从this answer收集到以下信息可以解决该问题:

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时,不会使CMake将-pthread参数传递给gcc符号。

我该怎么做才能使check_symbol_exists工作?

0 个答案:

没有答案