【问题标题】:What is the sanctioned way to build libc++ for clang on Linux?在 Linux 上为 clang 构建 libc++ 的认可方法是什么?
【发布时间】:2013-07-28 20:53:56
【问题描述】:

编辑/更新/注意:让 clang 使用 libstdc++。到目前为止,对我来说一直工作得很好。

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

过去我可以通过使用cmake 做一些事情来取得成功,但刚才我在http://llvm.org/svn/llvm-project/libcxx/trunk 项目树的lib 目录中发现了一个buildit 脚本。

这个buildit 脚本似乎没有使用libsupc++,这是我之前采用的cmake 方法。例如,this guide 显示了一个cmake 咒语来为libc++ 生成一个makefile,它将能够负责编译和安装。

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

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

【问题讨论】:

  • 我阅读了更多关于 libsupc++ 的内容,显然它是 GCC 的 libc++ 的一个子集。 buildit 脚本似乎链接了 libc++,所以我想这里没有什么令人惊讶的,也许我只需要调整一些 cmake 标志以获得更简化的安装。尽管如此,我还是很感激比我更了解 LLVM 的人提供一些一般性的解释。
  • 你的意思是 libsupc++ 为 GCC 的 libstdc++ 提供了一些与 ABI 相关的(和其他)功能。

标签: c++ linux clang llvm libc++


【解决方案1】:

libc++ website 很好地概述了构建 libc++ 的可能方法。

我建议使用 CMake + libc++abi

另见Arch Linux User Repository build script,它使用buildit 脚本。我从那里安装了 libc++,并通过使用成功地将它与 Arch Linux Clang 包一起使用

clang++ -std=c++11 -stdlib=libc++ -lc++abi

【讨论】:

  • 嗯,我在 CentOS 6.4 上,这使得工作比平时稍微困难一些,因为很多项目都......旧了。除了 4.4.7 目录之外,我还必须包含额外的路径 /usr/include/c++/4.4.4;/usr/include/c++/4.4.4/x86_64-redhat-linux,并且还要在 cmake 调用成功之前将 cxxabi-forced.h(在 4.4.4/ 中)复制到 bits/cxxabi_forced.h。这太痛苦了!这将进入我的机器初始化脚本,所以我会没事的一会儿。但是有人需要想出一些不那么痛苦的事情,因为这是cmake 没有做它唯一的工作。
  • 我还必须将 cxxabi.h#includecxxabi-forced.h 更改为 bits/cxxabi_forced.h 以获取 libc++.so make 调用才能成功。
  • 这不再有效(使用 SVN libc++)。使用生成的 libc++.so,任何使用 -std=c++0x -stdlib=libc++ 编译的尝试都会导致神秘的 undefined reference to `vtable for std::nested_exception'
  • @Steven:你是用 libc++abi 还是 libsupc++ 构建的?无论哪种情况,请尝试手动链接您需要的那个。不幸的是,我现在无法检查 SVN libc++,所以我只能建议联系 cfe-dev 邮件列表。我确实更新了我的答案以反映 AUR 包中使用的当前 libc++abi 首选项。
  • Arch Linux 自带了什么 GCC(大概是用来构建 clang 的)?
猜你喜欢
  • 2019-06-21
  • 1970-01-01
  • 2019-01-13
  • 2015-12-15
  • 2013-01-12
  • 2021-01-18
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
相关资源
最近更新 更多