我有两个应用程序,一个用gcc(c ++)编译,另一个用clang ++编译。我要对两个应用程序使用通用的共享Boost库。我的问题是使用clang编译器还是gcc编译器来编译boost共享库。我可以在使用clang编译的应用程序中使用通过gcc编译的boost库吗?

解决方案:

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

g ++带有一个称为libstdc ++的标准库实现。您可以指示g ++使用其他实现,但这并不简单。

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

因此,您的问题归结为您的应用程序使用什么标准库实现。如果他们使用相同的实现,则需要使用该实现(和任一编译器)构建Boost。如果他们使用不同的实现,则需要两个单独的Boost版本。

有时可以完成针对同一应用程序中不同标准库实现构建的组件的混合,但这并非一帆风顺,存在许多限制,并且使用boost这样的事情要么不可行,要么完全不可能。

发表评论

电子邮件地址不会被公开。 必填项已用*标注