使用共享库和不匹配的编译器

xco*_*rat 5 c++ shared-libraries

使用与您的程序不同的编译器版本编译的共享库有什么机会会引入问题?

如果您的程序使用的语言标准与他们的不同怎么办?

例如,如果我在使用 gcc-6、c++14 编译代码时链接使用 gcc-4.8、c++11 编译的 boost 库,会出现问题吗?

Non*_*714 4

如果 ABI(和 API)相同,它将正常工作,根据 gcc.gnu.org 的ABI 政策和指南,“给定使用给定编译器 ABI 和库 API 编译的应用程序,它将与标准 C++ 一起正常工作创建的图书馆具有相同的限制。”

使用不同 ABI 编译的共享库可以工作,但在某些情况下需要注意,因为它们可能会导致难以检测的重大错误。

gcc-4.8 和 gcc-6 具有不同的 ABI(应用程序二进制接口),因此在非常特定的情况下可能会输出不同的编译代码,并导致应用程序崩溃。

然而,“ GNU C++ 编译器 g++ 有一个编译器命令行选项,可以在各种不同的 C++ ABI 之间切换。 ”(根据 ABI 政策和指南。)

您可以从gcc.gnu.org阅读有关特定 ABI 问题的更多详细信息: