本节描述构建 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。