将程序链接到库时,每个库都使用不同的_GLIBCXX_USE_CXX11_ABI
Linking a program to libraries the use different _GLIBCXX_USE_CXX11_ABI each
我正在尝试编译一个依赖于两个库的程序(使用 GCC 5.4.O(。库 A 是使用旧的 ABI 编译的,而库 B 是使用新的 C++11 ABI 编译的(请参阅双 ABI(。
如果编译程序设置_GLIBCXX_USE_CXX11_ABI 1,则与库A有链接错误。如果我将其设置为 0,则与库 B 的链接错误。
是否可以指示编译器使用一个值 _GLIBCXX_USE_CXX11_ABI 编译对一个库的调用,并使用另一个值 _GLIBCXX_USE_CXX11_ABI 编译对另一个库的调用?
如果我理解正确,在编译依赖于另外两个库的新库时,这是可能的,但我不知道程序是否也是如此。
是否可以指示编译器使用一个值 _GLIBCXX_USE_CXX11_ABI 编译对一个库的调用,并使用另一个值 _GLIBCXX_USE_CXX11_ABI 编译对另一个库的调用?
没有办法告诉编译器为你做这件事。无论如何它都行不通,新旧std::string
类型不兼容,这就是拥有两个不同 ABI 的全部意义所在。
您可以做的是手动确保对库 A 的所有调用都发生在使用 _GLIBCXX_USE_CXX11_ABI=0
编译的代码中,而对库 B 的所有调用都发生在使用 _GLIBCXX_USE_CXX11_ABI=1
编译的代码中。这意味着您永远无法从单个源文件调用这两个库。
您必须隔离库 A 的所有用法和库 B 的所有用法,并且不能在程序的这两个部分之间传递std::string
(或std::list
(对象。
相关文章:
- 海湾合作委员会手册中提到的"C++ ABI Specification"是什么?
- 链接器错误:未定义对"Reference_Genome::seq[abi:cxx11]"的引用
- glibcxx STL 在实现 std::valarray::sum() 时是否不正确?
- 尝试从头开始实现Leetcode的FizzBuzz多线程问题。收到"libc++abi.dylib: terminating"错误
- 在AAPCS(ARM ABI)下,C/C++结构填充的稳定性如何
- 对于哪些 ABI,我可以使用 NDK v10e 构建 apk?
- C++ ABI 兼容性问题/张量流
- 了解 ELF 可执行SHT_NOTE部分".note.ABI-tag"
- 为什么库API+编译器ABI足以确保具有不同版本gcc的对象之间的兼容性
- 如何将要求降级到动态库的 glibcxx 3.4.20?
- E/libc++abi:终止于类型为google::protobuf::FatalException的未捕获异常
- libc++abi未定义符号:_ZTVN10__cxxabif120__si-class_type_infoE
- 如何在红帽上强制使用 cxx11 ABI?
- std::regex and dual ABI
- MRB_THROW会导致libc++abi.dylib中的错误
- abi-compliance-checker 中的扩展选项用于什么?
- C++ Linux 上的插件 ABI 问题
- 如果我只使用指向基类的指针,更改私有派生类是否会影响 ABI?
- Centos6 gcc6:编译简单的 c++11 测试文件时,默认的 ABI 不拾取
- 使用共享库版本支持不同 ABI 的最佳实践是什么?