我目前遇到的问题是我需要构建一个应用程序,其中的库似乎是使用不同的 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/