c++ - 是否可以使用不同 ABI 的外部库构建应用程序

标签 c++ linker-errors abi

我目前遇到的问题是我需要构建一个应用程序,其中的库似乎是使用不同的 C++ 版本构建的。 当我构建时,我得到了 undefined reference std::__cxx11::basic_string一个库中的错误以及我使用 -D_GLIBCXX_USE_CXX11_ABI=0 构建时的错误我在 std::string 收到 undefined reference 错误另一个图书馆。 它们都是外部库,不幸的是我无法重建自己。有解决办法吗?

最佳答案

我能想到的唯一可能的解决方法不是很好。假设您有具有不同 ABI 版本 vA 和 vB 的库 A 和 B。现在,为库 A 创建一个包装器,它公开一个独立于 ABI 的接口(interface)(普通 C,即所有公开的函数都应该用 extern "C" 声明)。然后使用 ABI 版本 vA 构建它(确保静态链接所需的 vA 库)。现在您可以使用 ABI 版本 vB 与包装库 A(现在应该是 ABI 独立的)和库 B 链接来构建您的应用程序。

当然,根据库 A 的接口(interface),创建一个普通的 C 接口(interface)可能需要一些创意,但它应该是可能的。

免责声明:我自己没有尝试过,我建议从最小测试开始。

关于c++ - 是否可以使用不同 ABI 的外部库构建应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57891775/

相关文章:

microsoft-metro - 将 VS2012 Windows 8 Metro 解决方案转换为 VS2013 后未解析的符号(在 Windows 8.1 上)

c++ - x86-64 调用约定中的返回值

android - arm64-v8a 是否与 armeabi-v7a 兼容?

c++ - 重载决策中的 const/non-const 右值引用

具有相同名称的 C++ 变量,上下文 : global and private,

c++ - Visual Studio强制在项目的所有编译单元中包含预编译头文件?

c++ - Qt QMetaData类名实现

c++ - 尝试测试 dll 时出现 LNK2019 错误

c - 链接器脚本错误: section overlap

c++ - GCC API 无法分解其自己的导出符号