2015-09-18 43 views
6

我想建立一个最近的clang + llvm + libC++。我目前正在一个系统上(基于CentOS 6.6),在这个系统中,我无法轻松获得clang的二进制包,但是通过设置一些环境变量,我可以在最近建立一个GCC(例如4.9)。正确的方法来建立clang和libC++在一起(引导)

我想铛的我的版本是

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

我能做到这一点,但它涉及到把铛,LLVM,libc中++,的libC++ ABI(和东西我可能忘记了)在一棵树,从一个新建的目录铛,然后设置了大量的标志一味地从第二个构建目录重新构建它。

是否有另一种正确的方式引导与libC++ clang?我相信肯定会有,因为正如我上面所描述的那样,clang的官方二进制文件是自给自足的。

+0

“官方”包可能会使用你的方法(把它全部放在一个单一的源代码树中)或交错建立(构建没有libC++的Clang,使用新的clang构建libC++,使用libC++构建新的clang)。 –

+0

顺便说一句,为什么你不下载一个更大的发行版的源代码包,看看他们是如何做到的? –

回答

6

我一直对自己很好奇,不认为有一个合适的,“幸运”的方式与李 bC++ bootstraping铿锵。

根据我的经验,从仓库安装的clang取决于libstdC++,并且从二进制 发行版中安装的clang也可以在http://www.llvm.org/releases/download.html#3.7.0(我已经尝试过用于Ubuntu 14.04的版本)。回购铿锵和来自llvm.org的一些区别:

  • 我还没有看到与libC++的repo clang;我必须单独构建它 。来自llvm.org的Clang确实附带了libc + +。
  • llvm.org clang似乎有图书馆的位置,相对于它所在的位置,硬编码的 ;生活在lib目录中的一些头文件(!)也是如此。

考虑从库和llvm.org那铿锵依赖的libstdC++,我会说,有摆脱这种依赖性的,至少不是我用,起到的Linux系统没有适当的WA Y,它包括Ubuntu,亚马逊Linux,CentOS和Fedora。然而,尽管如此,我发现即使使用依赖于libstdC++的clang也可以生成依赖于libC++而不是libstdC++的程序。即使可以建立一个本身不依赖于libstdC++的clang + llvm设置,就像你已经发现的那样,我不认为有必要跳过所有这些圈套。

如果你发现它有用,我有http://www.omniprog.info/clang_no_gcc.html

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

相关问题