适配Xcode10与iOS12之libstdc++问题

适配Xcode10与iOS12之libstdc++问题

开开心心的升级完新 macOS,以及新 XCode,准备体验了一把 Dark Mode 编程暗黑模式,快乐的打开自己的项目的时候,发现编译不通过了。。。。。

心里一群草泥马跑过去。。。。。。

后来调查了一下发现:

如果你的工程中如果依赖 libstdc++,无论是你本身的功能用 C++ 跨平台编写,还是你引入了某个 SDK 其内部依赖这个 libstdc++,都会导致整个工程编译不通过,报出 Undefined symbols,C++ 的 List 找不到了

原因是苹果在 XCode10 和 iOS12 中移除了 libstdc++ 这个库,由 libc++ 这个库取而代之,苹果的解释是 libstdc++ 已经标记为废弃有5年了,建议大家使用经过了 llvm 优化过并且全面支持C++11的 libc++ 库。

解决方法

下载文件
libstdc++.6.0.9.tbd.zip 解压,放到目录

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/
拷贝过去后,你就可以在新 XCode(黑暗模式666666)下面看到libstdc++了,放心的添加到工程里吧

模拟器编译报错

但是,执行上面操作后,模拟器还是不行
报错:

模拟器报错
拷贝libstdc++之后就可以编译通过了,但 App 在模拟器里一运行就崩溃,就会报动态链接库装载出错,看出错提示说是 .dylib 与这个模拟器不符合。这是 XCode10 自带的 iOS12 模拟器的问题,在 XCode10 中安装 iOS11 的模拟器运行环境,然后切换到 iOS11 模拟器运行,一切问题没有。

这里划重点哦。。。。

如果想在 XCode12 iOS12 模拟器中运行:

libstdc++_sim.zip 解压,放到目录
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/
libstdc++.dylib_sim.zip 解压,放到目录
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/
大功告成

这时模拟器真机都可以正常跑起来了,让我们一起摇摆。。。。
但是这种方法只是临时解决,苹果官方爸爸是不希望咱们这么干的

正确解决办法

如果你自己的业务模块使用了 libstdc++ ,那么就把模块代码重新调整为依赖 libc++ ,然后重新检查是否存在问题,重新编译
如果你引用的三方库使用了 libstdc++ ,那么向三方库寻求支持,进行升级

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值