5.2.3 通用 Linux 注释

本节描述构建特定于 Linux 的连接器/C++ 应用程序的各个方面。有关一般的应用程序构建信息,请参阅 第 5.1 节,“构建连接器/C++ 应用程序:一般注意事项”

以前,通用 Linux 软件包是在 EL7 平台上构建的,并且在该平台上 GCC 配置为使用较旧的 ABI of libstdc++. 该库导出的一些符号在其名称中包含标准库类型,因此与新 CXX11ABI 不兼容,这是大多数平台上现代 GCC 的默认设置(EL7 是一个例外)。因此,除非您在 EL7 上构建代码并使用 GCC6 或更高版本的编译器,否则它默认为新CXX11ABI 并查找其中具有新 ABI 名称的连接器/C++ 符号。

从 Connector/C++ 8.0.30 开始,Connector/C++ 使用新的 CXX11 ABI。进行此更改后,您在使用从通用 Linux 软件包安装的连接器/C++ 时可能会遇到以下问题:

  • 从 Connector/C++ 8.0.29(或更早版本)升级到 8.0.30(或更高版本)可能会在升级后产生运行时错误,即使先前版本的 Connector/C++ 运行成功。

  • 它不适用于 GCC5 或更早版本,因为旧编译器使用旧 ABI,无法链接到使用新 ABI 的代码。

  • 它不会在 EL6、EL7 或任何其他修改 GCC 设置以默认使用旧 ABI 的平台上运行。但是,在这种情况下,解决方法是在-D_GLIBCXX_USE_CXX11_ABI=1.

对于大多数平台,包括 EL8,GCC 默认值已更改为新的 ABI。