编译LLVM 14时pthread相关未定义引用错误的解决方法
解决LLVM 14编译时gtest缺失pthread依赖的链接错误
你的推测完全正确——gtest依赖POSIX线程库(pthread),当前CMake配置未自动链接该库,导致出现undefined reference to pthread_getspecific的链接错误。针对Ubuntu 18.04环境,可通过以下几种方式解决:
方法一:修改CMake命令添加全局链接参数
直接在原CMake命令中加入强制链接pthread的配置,修改后的完整命令如下:
cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX=/home/me/data/programs/llvm14/llvm-install-release -DLLVM_TARGETS_TO_BUILD="X86" -DLLVM_ENABLE_PROJECTS="clang;clang-tools-extra;libunwind;lldb;lld;compiler-rt;polly;" -DLLVM_ENABLE_RUNTIMES="libcxx;libcxxabi" -DCMAKE_BUILD_TYPE=Release -DLLVM_USE_SPLIT_DWARF=ON -DLLVM_OPTIMIZED_TABLEGEN=ON -DLLVM_INSTALL_UTILS=ON -DLLVM_ENABLE_RTTI=ON -DBUILD_SHARED_LIBS=ON -DLLVM_ENABLE_ABI_BREAKING_CHECKS=OFF -DCMAKE_EXE_LINKER_FLAGS="-lpthread" -DCMAKE_SHARED_LINKER_FLAGS="-lpthread" ../llvm
新增的两个参数会让所有可执行文件和共享库都链接pthread库,覆盖gtest的依赖需求。
方法二:修改已生成的CMake缓存(无需重新执行CMake)
如果已经执行过CMake生成了编译目录,可直接修改缓存文件:
- 进入LLVM编译目录,找到
CMakeCache.txt文件 - 搜索
CMAKE_EXE_LINKER_FLAGS和CMAKE_SHARED_LINKER_FLAGS条目,在现有值末尾追加-lpthread - 保存文件后重新执行
make命令即可
方法三:仅针对LLVM测试组件配置链接参数
因为错误来自LLVM的测试模块(gtest用于单元测试),也可以只给测试程序添加链接参数:
在原CMake命令中加入-DLLVM_TEST_LINKER_FLAGS="-lpthread",这样仅测试相关的二进制文件会链接pthread库,更精准。
完成上述修改后,重新执行CMake(方法一或三)或直接make(方法二),即可解决该链接错误。
内容的提问来源于stack exchange,提问作者user1388672
相关产品推荐
相关产品推荐

