在Linux上,为clang构建libc++的官方方式是什么?

9

编辑/更新/注:只需让clang使用libstdc++即可。到目前为止,这对我非常有效。

===============================

过去,我曾通过使用cmake做过一些成功的尝试,但现在我在http://llvm.org/svn/llvm-project/libcxx/trunk项目树的lib目录中发现了一个buildit脚本。

这个buildit脚本似乎没有使用cmake方法所用的libsupc++。例如,这篇指南展示了一个cmake命令来生成libc++的makefile,它能够负责编译和安装。

我的问题是,这些不同的方式生成LLVM-libc++之间有什么区别,应该使用哪种?它们行为有所不同吗?

buildit脚本似乎没有提供任何有关安装的帮助。是否有任何指导如何正确安装库的方向?使用cmake构建的libc++时,我必须始终将-lc++添加到链接器标志(以及-L路径),但在我的OS X makefile中不需要。


我进一步了解了libsupc++是什么,显然它是GCC的libc++的子集。 buildit脚本似乎链接了libc++,所以我想这里没有什么令人惊讶的地方,也许我只需要调整一些cmake标志以获得更流畅的安装。不过,如果有比我更了解LLVM的人能够给出一些通用的解释,我会非常感激。 - Steven Lu
你的意思是 libsupc++ 为 GCC 的 libstdc++ 提供了一些与 ABI 相关的(以及其他)功能。 - rubenvb
1个回答

3
我建议使用CMake + libc++abi 来构建libc++。这样可以更好地理解 libc ++网站上的概述。
另外,还可以参见Arch Linux用户库构建脚本,该脚本使用buildit脚本进行安装。我从中安装了libc ++并与Arch Linux Clang包成功地使用了它。
clang++ -std=c++11 -stdlib=libc++ -lc++abi

3
我现在使用的是CentOS 6.4,这使得许多操作变得比平常更难,因为很多东西都太老了。在调用cmake之前,我必须额外添加路径/usr/include/c++/4.4.4;/usr/include/c++/4.4.4/x86_64-redhat-linux,除了4.4.7目录之外。还要将cxxabi-forced.h(位于4.4.4/)复制到bits/cxxabi_forced.h。这非常痛苦!我将把这些内容放入我的机器初始脚本中,这样我就可以暂时解决问题了。但是有人需要想出一种更少痛苦的方法,因为这是cmake的唯一工作,它却做不好。 - Steven Lu
1
我还不得不在 cxxabi.h 中将 #includecxxabi-forced.h 更改为 bits/cxxabi_forced.h,以使 libc++.so 的 make 调用成功。 - Steven Lu
1
这已经不再适用于 SVN libc++。使用生成的 libc++.so,任何尝试使用-std=c++0x -stdlib=libc++编译的操作都会导致神秘的“undefined reference to `vtable for std::nested_exception'”错误。 - Steven Lu
@Steven:你是用libc++abi还是libsupc++构建的?无论哪种情况,都尝试手动链接所需的库。不幸的是,我现在无法检查SVN libc++,所以我只能建议联系cfe-dev邮件列表了解更多信息。我已经更新了我的答案,以反映当前libc++abi首选项,该选项用于AUR软件包。 - rubenvb
Arch Linux自带哪个版本的GCC(可能用于构建clang)? - Steven Lu
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接