ios - 在 iOS 项目中混合使用 stdc++ 和 libc++

标签 ios xcode static-libraries libstdc++ libc++

我在配置 iOS 项目时遇到困难,该项目使用链接到 gcc 使用的旧 libstdc++ 的静态库。该库是 32 位和 64 位的。

有 6 个库(例如 libssl.a)是 32 位的,必须更新。如果我从源代码编译这些库,它们将自动与 libc++ 链接,这将导致我的链接器报错。

因此,这是我的问题:

1) 有没有办法让项目中的单个静态库使用 libstdc++,而让其他静态库使用 libc++?

2) 如何从源代码编译库(如 libcrypto 和 libssh)并强制它们使用旧的 libstdc++ 标准库?

3) 有没有其他方法可以解决这个问题?

最佳答案

1) 是的,您当然可以混合和匹配您的 C++ 代码使用的 C++ 运行时,只要这些单独的模块实际上不在彼此之间传递对象即可。例如,如果您的应用程序中有两个模块,它们只公开 C API 但在内部使用 C++,那么每个模块都可以使用它们想要的任何 C++ 运行时。尝试在运行时之间共享对象时会出现问题。

2) 您可以在编译和链接时使用'--stdlib=libstdc++'或'--stdlib=libc++'命令行参数来指定要使用的C++库。如果您的最终可执行文件需要链接到两者,您将需要手动指定另一个(例如:--stdlib=libc++ -lstdc++)。

3) 是的,但请注意,libstdc++ 多年前就已被弃用,甚至在 watchOS 和 tvOS 上都不可用,所以最好的办法是将所有内容都转移到 libc++。

关于ios - 在 iOS 项目中混合使用 stdc++ 和 libc++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32794607/

相关文章:

swift - 在 iOS 中,如何使用 Storyboard将标签连接到 View ?

xcode - 如何部署 Mac 命令行工具

ios - 防止这种与可选相关的崩溃的最佳方法是什么?

linux - 使用 g++ 链接静态库而不是共享

ios - 为什么静态库符号在归档期间不包含在 dSYM 中?

iphone - 如何旋转两个 UIView?

ios - 将数据传递到搜索栏

objective-c - 正确使用 CIDetectorTracking

ios - 为 AVURLAssets 设置 HTTP header 字段

linux - 使用 ar 创建的静态库具有分辨率为 1 s 的时间戳