gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 05:11:27 29 4
gpt4 key购买 nike

我在配置 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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com