我在使用CMake和clang编译需要OpenMP的项目时遇到麻烦,我将CMakeLists.txt
设置为这样
cmake_minimum_required(VERSION 3.20)
project(cmat C)
set(CMAKE_C_STANDARD 11)
include_directories("/usr/local/include" "/usr/local/opt/llvm/include")
link_directories("/usr/local/lib" "/usr/local/opt/llvm/lib")
add_library(cmat SHARED cmat.c Calculation/_Basic_Calculate_.c Calculation/_Basic_Calculate_.h)
当我开始构建我的项目时,它给出错误
Undefined symbols for architecture x86_64:
"_omp_get_thread_num", referenced from:
_NmMulMat in _Basic_Calculate_.c.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [libcmat.dylib] Error 1
make[2]: *** [CMakeFiles/cmat.dir/all] Error 2
make[1]: *** [CMakeFiles/cmat.dir/rule] Error 2
make: *** [cmat] Error 2
我试过像这样和这样的其他答案,但它们就是不适合我。
我的Mac上的clang版本是13.0.0,CMake是3.21.31 _1,我使用的是Clion作为IDE,这样的命令将在shell编译文件时工作
clang -Xpreprocessor -fopenmp -I/usr/local/include -L/usr/local/lib -lomp filename.c -o output
非常感谢你的帮助。
您需要通过提供-DCMAKE_EXE_LINKER_FLAGS=-fopenmp [and any other options like -g]
来将-fopenmp
添加到链接器标志中。
在我不使用的CLion中,这将在Preferences ->构建、执行、部署->CMake→CMake options根据我对文档的理解
还请注意,显式地与-lomp
链接可能是错误的策略,这种情况应该是指定-fopenmp
的副作用。