如果我用llvm-gcc构建一个静态库,然后把它链接到一个用名为gcc编译的程序上,结果会起作用吗?
其他的组合也是一样的我对这在Linux (当然是使用普通的非命令式的gcc )和其他平台上是如何工作的也很感兴趣,但重点是Windows。
我也对所有的语言都感兴趣,但是我非常强调C和C++ --显然clang不支持Fortran等,但我相信llvm- on支持。
我假设它们都使用ELF文件格式,但调用约定、虚拟表布局等又如何呢?
发布于 2012-06-30 22:04:42
是的,对于C代码,Clang和GCC是兼容的(事实上,他们都使用GNU工具链进行链接)。您只需确保告诉clang创建编译对象,而不是中间的bitcode对象。C ABI定义良好,所以唯一的问题是存储格式。
C++在编译器之间是不可移植的;不同的编译器使用不同的虚拟表调用、构造函数、销毁、名称损坏、模板实现等。通常,您应该假设来自一个C++编译器的对象不能与另一个编译器一起工作。
然而,是的,在写这篇文章的时候,Clang++也能够使用GCC/C++编译库;我最近建立了一个平台,使用G++的标准运行时库使用clang编译C++程序,并且它compiles+links得很好。
发布于 2010-07-17 05:44:43
我不知道答案,但this presentation中的幻灯片10似乎暗示由llvmgcc生成的".o“文件包含LLVM bytecode (.bc)而不是通常的目标特定的目标代码,因此链接时优化是可能的。然而,LLVM链接器应该能够将LLVM代码与“普通”的GCC生成的代码链接起来,就像下一张幻灯片所说的“在本地.o文件和库中链接”。
LLVM是一个Linux工具,我有时发现Linux编译器在Windows上不能很好地工作。我很好奇你能不能让它工作。
发布于 2013-03-04 20:31:33
我使用-m i386pep通过ld链接clang的.o文件。在http://dragonegg.llvm.org/上可以看到llvm致力于与gcc集成,因此非常直观地猜测llvm家族将与gcc工具链交叉兼容。
https://stackoverflow.com/questions/3217513
复制相似问题