如何使用旧 ABI 通过 GCC 5 编译 boost?
How to Compile boost with GCC 5 using old ABI?
我下载了一个库,该库是在 GCC 中的 ABI 更改之前使用 gcc 4.8 编译的。
在我的笔记本电脑(最新的 kubuntu)上我有 GCC 5.2。当我安装 boost 时,它似乎使用了新的 ABI,但随后出现以下 link 错误
未定义符号.....__cxx11.....
如何使用带有 GCC5 的旧 ABI 安装 boost?
据我所知,官方 Kubuntu 存储库中没有为旧 ABI 预构建的 Boost 包,因此您必须自己构建 Boost。构建过程记录在案 here。
确保您构建的 Boost 版本与构建库时使用的版本相同。如果定义了任何 Boost 配置宏,您也必须以类似的方式定义它们。否则,您可能会遇到库与您构建的 Boost 之间的 ABI 不兼容问题。
为了将 libstdc++ 切换到旧 ABI,您还必须将 _GLIBCXX_USE_CXX11_ABI
定义为 0,如 here 所述。例如:
b2 -j8 variant=release define=_GLIBCXX_USE_CXX11_ABI=0 stage
当您构建自己的使用 Boost 和库的代码时,您还需要定义宏。
define
属性 与许多其他内容一起记录在案 here。
我下载了一个库,该库是在 GCC 中的 ABI 更改之前使用 gcc 4.8 编译的。
在我的笔记本电脑(最新的 kubuntu)上我有 GCC 5.2。当我安装 boost 时,它似乎使用了新的 ABI,但随后出现以下 link 错误
未定义符号.....__cxx11.....
如何使用带有 GCC5 的旧 ABI 安装 boost?
据我所知,官方 Kubuntu 存储库中没有为旧 ABI 预构建的 Boost 包,因此您必须自己构建 Boost。构建过程记录在案 here。
确保您构建的 Boost 版本与构建库时使用的版本相同。如果定义了任何 Boost 配置宏,您也必须以类似的方式定义它们。否则,您可能会遇到库与您构建的 Boost 之间的 ABI 不兼容问题。
为了将 libstdc++ 切换到旧 ABI,您还必须将 _GLIBCXX_USE_CXX11_ABI
定义为 0,如 here 所述。例如:
b2 -j8 variant=release define=_GLIBCXX_USE_CXX11_ABI=0 stage
当您构建自己的使用 Boost 和库的代码时,您还需要定义宏。
define
属性 与许多其他内容一起记录在案 here。