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

jdm*_*jdm 9 cmake clang clang++ libc++

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

我想要我的铿锵声

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

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

是否有另一种适当的方式来引导libc ++?我相信一定有,因为llvm&clang的官方二进制文件就像我上面描述的那样是自给自足的.

Ana*_*i P 7

我自己一直对此感到好奇,并且不认为有一种适当的,"有福的"方式可以用li bc ++引导铿锵声.

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

  • 我还没有见过libc ++的回购铿锵声; 我必须单独构建它.来自llvm.org的Clang确实附带了libc + +.
  • llvm.org clang似乎有相对于它居住地的图书馆位置,硬编码; 对于存在于lib目录中的一些头文件(!)也是如此.

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

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

如果你觉得它有用,我在http://www.omniprog.info/clang_no_gcc.html上有一篇简短的文章.

我还在试验这一切,如果我遇到一些有趣的东西,我会更新这个答案.