gcc vs clang 公共库问题

Zub*_*net 4 c++ gcc clang++

我有两个应用程序,一个用 gcc(c++) 编译,另一个用 clang++ 编译。我要为这两个应用程序使用通用共享增强库。我的问题是是否使用 clang 编译器或 gcc 编译器编译 boost 共享库。我可以在使用 clang 编译的应用程序中使用使用 gcc 编译的 boost 库吗?

n. *_* m. 6

g++ 和 clang++ 作为编译器是兼容的(因为它们都遵循 Itanium ABI),但它们可能带有不兼容的标准库实现。

g++ 带有一个名为 libstdc++ 的标准库实现。您可以指示 g++ 使用不同的实现,但这并非微不足道。

clang++ 有时没有自己的标准库实现(并且被配置为使用由 g++ 提供的实现),有时会带有一个名为 libc++ 的实现。可以通过单个命令行选项轻松切换 clang++ 以使用 libc++ 或 libstdc++。

所以你的问题归结为你的应用程序使用什么标准库实现。如果它们使用相同的实现,则需要使用该实现(以及任一编译器)构建 Boost。如果它们使用不同的实现,则需要两个单独的 Boost 构建。

有时可以在同一应用程序中混合针对不同标准库实现构建的组件,但这并不简单,需要很多限制,并且像 boost 这样的东西要么不可行,要么完全不可能。