LLVM的cmake构建:HAVE_CXX_ATOMICS_WITHOUT_LIB测试失败

时间:2019-04-10 23:46:55

标签: cmake llvm cross-compiling

我在尝试交叉编译带有cmake的LLVM v3.7时遇到此故障:

<path to clang>/clang++  -DHAVE_CXX_ATOMICS_WITHOUT_LIB -std=c++11  -rdynamic CMakeFiles/cmTC_82a21.dir/src.cxx.o  -o cmTC_82a21  -lm -ldl && :
ld.lld: error: undefined symbol: pthread_once
referenced by cxa_exception_storage.cpp

然后在CMakeError.log文件中跟随其他许多“未定义符号:pthread_blah”错误。

我有四个问题:

(1)cmake正在执行该操作的哪个阶段以确定确定的构建环境/平台的功能? (即类似configure的阶段,它执行许多小的编译测试以查看它们是否成功,看是否可以在预期的路径中找到头文件,等等。)

(2)在我看来,将-lpthread作为测试编译行的一部分可以解决此问题。 (a)有没有办法告诉cmake做到这一点?(b)是解决这个问题的明智方法吗?好像我可以告诉cmake那样,它将通过这些测试。

(3)cmake命令似乎成功,并以“构建文件已写入...”结束。当这些预测试之一具有上述失败条件并报告“配置不完整,发生错误!”时,我该怎么办。

(4)我试图获得此cmake交叉编译版本以与库存的LLVM v3.7 cmake文件一起使用,因此我试图仅使用命令行选项来控制cmake。这有点难看,我想知道是否有一种简单的方法可以将所有这些设置放到cmake文件中。这种方法的一个问题是,我对LLVM中的所有目标都不熟悉,因此,如果我试图向目标中添加库以解决链接问题,那么我将不知道该添加哪些目标至。我希望在这种情况下,我可以用更大的锤子敲打它,并将它们添加到各处,希望如果不使用它们,将被忽略。

非常感谢您的耐心和时间阅读所有^^^。

0 个答案:

没有答案