5.2.3 通用 Linux 说明

本节描述构建 Connector/C++ 应用程序中特定于 Linux 的方面。通用 Linux 包不包含 Connector/C++ 静态库。有关一般应用程序构建信息,请参见第 5.1 节,“构建 Connector/C++ 应用程序:一般注意事项”.

注意

Connector/C++ 8.0.32 为 ARM 架构 (64 位) 提供通用 Linux 包。所有 Connector/C++ 版本都为 Intel 架构 (32 位和 64 位) 提供通用 Linux 包。

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

从 Connector/C++ 8.0.30 开始,Connector/C++ 使用新的 CXX11 ABI。更改后,在使用从通用 Linux 包安装的 Connector/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。