llvm-gcc和clang二进制文件是否与gcc兼容? - 尤其是Windows上的mingw gcc

Ste*_*314 27 linker gcc llvm clang llvm-gcc

如果我使用llvm-gcc构建一个静态库,然后将它与使用mingw gcc编译的程序链接,结果是否有效?

对于llvm-gcc,clang和普通gcc的其他组合也是如此.我对如何在Linux(当然使用普通的非mingw gcc)和其他平台上工作感兴趣,但重点是Windows.

我也对所有语言感兴趣,但强调C和C++ - 显然clang不支持Fortran等,但我相信llvm-gcc会这样做.

我假设它们都使用ELF文件格式,但是调用约定,虚拟表格布局等呢?

Skr*_*lar 23

是的,对于C代码,Clang和GCC是兼容的(实际上它们都使用GNU工具链进行链接.)你只需要确保告诉clang创建编译对象而不是中间bitcode对象.C ABI定义明确,因此唯一的问题是存储格式.

C++在编译器之间无法轻松移植; 不同的编译器使用不同的虚拟表调用,构造函数,销毁,名称修改,模板实现等.通常,您应该假设来自一个C++编译器的对象不能与另一个C++编译器一起使用.

但是,是的,在撰写本文时,Clang ++也能够使用GCC/C++编译库; 我最近建立了一个使用G ++的标准运行时库来编译C++程序的装备,它可以很好地编译+链接.

  • 如果你想在C++ 11模式下使用Clang ++,忘了说你必须这样做.你必须指定clang/LLVM C++ 11兼容的标准库,gcc的标准库并不好. (3认同)