【问题标题】:Proper way to build clang and libc++ together (bootstrap)一起构建 clang 和 libc++ 的正确方法(引导程序)
【发布时间】:2015-12-15 07:52:34
【问题描述】:

我最近想构建一个clang + llvm + libc++。我目前在一个系统(基于 CentOS 6.6)上,我无法轻松获得 clang 的二进制包,但我可以通过设置一些环境变量来设置一个足够新的 GCC 来构建 clang(例如 4.9)。

我希望我的 clang 版本是

  • 便携,即没有硬编码路径(例如使用-rpath $ORIGIN
  • 既不依赖于系统 gcc 也不依赖于导入的 gcc 4.9(即它们的 C/C++ 运行时)
  • 特别是,编译器、编译器即库 libclang.so 以及使用新编译器构建的程序都不应依赖 libstdc++,而应使用新构建的 libc++。

我可以这样做,但它涉及将 clang、llvm、libc++、libc++abi(以及我可能忘记的东西)放在一棵树中,从一个构建目录构建 clang,然后盲目设置很多标志并构建再次从第二个构建目录。

还有另一种使用 libc++ 引导 clang 的正确方法吗?我相信肯定有,因为 llvm 和 clang 的官方二进制文件如上所述是自给自足的。

【问题讨论】:

  • “官方”软件包可能会使用您的方法(将所有内容放在单个源代码树中)或交错构建(构建没有 libc++ 的 Clang,使用新的 clang 构建 libc++,构建新的 clang libc++).
  • 顺便说一句,你为什么不下载一个更大的发行版的源包,看看他们是怎么做的?

标签: cmake clang clang++ libc++


【解决方案1】:

我自己也对此很好奇,但认为没有一种适当的、“有福的”方式来用 li 引导 clang bc++。

根据我的经验,从存储库安装的 clang 依赖于 libstdc++,从二进制文件安装的 clang 也是如此 http://www.llvm.org/releases/download.html#3.7.0 上提供的发行版(我已经尝试过用于 Ubuntu 14.04 的发行版)。 repo clang 和来自 llvm.org 的一些区别:

  • 我还没有看到 libc++ 的 repo clang;我必须建造它 分别地。来自 llvm.org 的 Clang 确实带有 libc+ +。
  • llvm.org clang 似乎有库位置,相对于 它所在的位置,硬编码; lib 目录中的一些头文件(!)也是如此。

考虑到来自存储库和 llvm.org 的 clang 依赖于 libstdc++,我会说没有适当的 wa y 摆脱这种依赖,至少在我使用过的 Linux 系统上没有,包括 Ubuntu、Amazon Linux、CentOS 和 Fedora。

话虽如此,但我发现即使使用依赖于 libstdc++ 的 clang 也可以生成依赖于 libc++ 而不是 libstdc++ 的程序。即使可以构建一个本身不依赖于 libstdc++ 的 clang+llvm 设置,正如您已经发现的那样,我认为没有必要跳过所有这些障碍。

如果你觉得它有帮助,我在http://www.omniprog.info/clang_no_gcc.html 有一篇简短的文章(另见this

我仍在尝试所有这些,如果遇到有趣的事情,我会更新这个答案。

【讨论】:

    猜你喜欢
    • 2013-07-28
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多