我有两个应用程序,一个是用 gcc(c++) 编译的,另一个是用 clang++ 编译的。我将为这两个应用程序使用共同的共享提升库。我的问题是是否使用 clang 编译器或 gcc 编译器编译 boost 共享库。我可以在使用 clang 编译的应用程序中使用使用 gcc 编译的 boost 库吗?
最佳答案
g++ 和 clang++ 作为编译器兼容(因为它们都遵循 Itanium ABI),但它们可能带有不兼容的标准库实现。
g++ 带有一个称为 libstdc++ 的标准库实现。您可以指示 g++ 使用不同的实现,但这并非微不足道。
clang++ 有时没有自己的标准库实现(并配置为使用 g++ 提供的实现),有时带有称为 libc++ 的实现。可以通过单个命令行选项轻松地将 clang++ 切换为使用 libc++ 或 libstdc++。
所以您的问题归结为您的应用程序使用什么标准库实现。如果他们使用相同的实现,则需要使用该实现(以及任一编译器)构建 Boost。如果他们使用不同的实现,您需要两个单独的 Boost 构建。
有时可以在同一个应用程序中混合针对不同标准库实现构建的组件,但这并不简单,需要很多限制,并且像 boost 这样的东西要么不可行,要么完全不可能.
关于c++ - gcc vs clang 公共(public)库问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49715462/