Clang可以使用GCC编译的.a库编译代码吗?

DuckQueen:

我的项目目前正在gcc下进行编译。它使用Boost,ZeroMQ作为静态.a库以及某些.so库(例如SDL)。我想一直走,但不是现在。我想知道是否可以编译使用clang和clang编译的使用代码.a.so库?

Basile Starynkevitch:

是的,您通常可以使用clangGCC编译的库(反之亦然,可以gcc使用CLANG编译的库),因为实际上它不是编译而是相关的链接您可能不走运,得到不愉快的惊喜。

原则上,您可以依赖于libstdc++用于链接相关库的版本(如果它们是用C ++编码的)。实际上,这通常并不重要。

理论上讲,在C ++中,名称重整可能是一个问题(可能存在一些极端情况,甚至是的两个不同版本之间的不兼容g++)。同样,在实践中,这通常不是问题。

因此,通常您可以将CLANG(甚至它的不同版本,也可以是接近版本)与GCC混合使用,但是您可能会感到不愉快。任何C ++编译器(无论是CLANG还是GCC)都应该期望能够使用相同的编译器和版本(包括相同的C ++标准库 实现将整个软件(和所有库)编译并链接在一起。这就是为什么在发行版中升级编译器需要大量工作的原因:发行版制造商必须确保所有软件包都能良好地编译(它们确实会带来意外!)。

注意libstdc ++的版本确实很重要。Clang和GCC社区都在努力使其ABI与编译器升级兼容,但是存在一些微不足道的情况。阅读特定和特定的C ++标准库实现的文档。这些极端的情况可以解释在GCC 8编译的代码中使用良好的C ++库二进制文件(与GCC 5编译)时发生的神秘崩溃。该错误不在库中,而是ABI不兼容地演变。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我应该从源代码编译库吗?

GCC 编译器可以使用 nVidia GPU 来加速编译和/或链接吗?

代码使用clang编译,但不使用gcc编译

没有标准库,Rust代码可以编译吗?

C编译器编译的C源代码中可以使用static_cast吗?

C ++ 14/17项目可以使用按C ++ 11标准编译的二进制库吗,还是需要重新编译源代码?

是否可以在gcc编译器中使用clang std库?

我可以使用Visual C ++进行将使用gcc进行编译的作业吗?

我可以使用LLVM加速构建并减少GCC编译时间吗?

我可以使用GCC编译器和Clangd Language Server吗?

可以使用 GNU GCC 编译器构建 libusb 吗?

无法使用clang编译代码,但可用于gcc

为什么下面的代码不能用gcc编译,但是用clang可以正常编译

为什么此代码无法在gcc 4.8.5中编译而在clang中可以正常编译

可以使用继承来减少C ++中已编译代码的大小吗?

可以使用cabal / stack / nix编译成动态库吗?

是否可以使用黄金链接程序编译和链接Clang / LLVM?

我可以使用较新的gcc / clang定位较旧的linux吗?C ++

Swift可以编译为本地代码吗?

是否可以使用多个目标构建 GCC 交叉编译器和 Binutils?

我可以使用C / C ++编译器吗?

Windows中编译的Java在Linux中可以使用吗?

TypeScript中可以使用编译时标记的数字吗?

是否可以使用GCC来编译具有特定编译器标志的代码文件的一部分?

在为 arm 进行交叉编译时,是否有特定的编译器标志可以使用 gcc sync-builtins?

gcc可以编译可变参数模板,而clang不能

编译代码真的比解释代码快吗?

是否可以使用.NET Core Roslyn编译器编译单个C#代码文件?

错误:使用clang没有可行的重载,使用gcc编译