一起构建clang和libc ++的正确方法(bootstrap)

时间:2015-09-18 08:30:51

标签: cmake clang clang++ libc++

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

我喜欢我的clang版本

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

我可以做到这一点,但它涉及将clang,llvm,libc ++,libc ++ abi(以及我可能忘记的事情)放在一棵树上,从一个构建目录构建clang,然后盲目地设置很多标记并构建它再次来自第二个构建目录。

是否有另一种正确的方法来引导libc ++?我相信必须有,因为llvm& amp;如上所述,clang是自给自足的。

1 个答案:

答案 0 :(得分:7)

我自己一直对此感到好奇,并且不认为有一个正确的,#34;祝福的"和李一起训练的方式 BC ++。

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

  • 我还没有见过与libc ++的回购铿锵声;我不得不建造它 分别。来自llvm.org的Clang确实附带了libc + +。
  • llvm.org clang似乎有相对于的库位置 它居住的地方,硬编码;对于存在于lib目录中的一些头文件(!)也是如此。

考虑到来自存储库和llvm.org的clang依赖于libstdc ++,我会说没有正确的wa 你摆脱了这种依赖,至少在我曾经玩过的Linux系统上没有,包括Ubuntu,Amazon Linux,CentOS和Fedora。

然而,说到这里,我发现即使使用依赖于libstdc ++的clang也可以生成依赖于libc ++而不是libstdc ++的程序。尽管可以构建一个本身并不依赖于libstdc ++的clang + llvm设置,正如您已经发现的那样,但我认为没必要跳过所有这些环节。

如果您觉得有帮助,我会在http://www.omniprog.info/clang_no_gcc.html

上发表一篇简短的文章

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