我正在编译我的代码,其中我在C中使用posix线程。
我正在使用CLion及其CMakeLists.txt:
cmake_minimum_required(VERSION 3.7)
project(Test)
set(CMAKE_C_STANDARD 99)
add_definitions(-lpthread)
set(SOURCE_FILES main.c)
add_executable(Test ${SOURCE_FILES})
我收到错误(例如:undefined reference to
sem_init'`)。
建议的解决方案建议是添加-lpthread
编译器标志,但我已经添加了它。
我从命令行编译了相同的代码:
gcc main.c -lpthread
它编译没有任何问题。
这可能是什么问题/解决方案?
答案 0 :(得分:3)
完全删除add_definitions(-lpthread)
,因为pthread不是定义,而是库依赖。
在add_executable()
之后添加:
target_link_libraries(Test pthread)
此外,如果您想查看CMake使用的命令而不必检查其文件,您可以在cmake -DCMAKE_VERBOSE_MAKEFILE=ON ...
的命令行中使用它。
顺便说一下,总是更喜欢target_*
所有target_compile_definitions()
命令,而不是旧版add_definitions()
。这样可以保持项目属性和依赖关系的清洁,并最大限度地减少不同目标之间的干扰。
如果在上述更改之后您的代码仍然无法编译,那么代码本身很可能是错误的(与CMake无关)。