C++11 和链接到 libstdc++ 的静态库

标签 c++ c++11 libstdc++ libc++

我有一个库,它是 C 和 C++ 的静态库。 问题是该库链接到 libstdc++

在 Xcode 中,当我切换到 libc++(使用 C++11 功能并使用提到的 C++ 库)时,它会抛出许多编译错误。

该库的作者说该库还没有为 C++11 做好准备。

还有办法同时使用两者吗?

最佳答案

您的第 3 方静态库应该链接到与其编译时所针对的相同版本的 C++ 库。这不仅包括库的类型 (libstdc++),还包括主要/次要版本号以确保 ABI 兼容性。任何不同的库版本都会让你要么在最好的情况下构建中断,要么在最坏的情况下导致奇怪的崩溃。在 GCC manual 中阅读有关 ABI 版本控制的更多信息.

如果第3方库的接口(interface)只有POD types ,您可以从静态库中创建一个共享库,然后从与 libc++ 链接的应用程序中使用它。

关于C++11 和链接到 libstdc++ 的静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31819199/

相关文章:

c++ - 这个 typedef 定义是什么意思?

c++ - 使用可变参数模板在 C++11 中调用函数参数

c++ - 运算符作为友元重载函数?

c++ - 链接到特定的 stdc++ 库

c++ - std::istream 运算符异常重置/不抛出

c++ - std::variant 在 gcc 8 和 9 中需要默认构造函数,而在 gcc 10/clang 中不需要

c++ - 我的按位交换不起作用

c++ - 从 struct 访问数组会使程序崩溃

c++ - 如何在等待某些事件时不占用 CPU?

c++ - 不使用适用于 C++ 的 MySql Connector 建立 MySQL 连接