Xcode10适配之libstdc++.6.0.9
Starting March 2019, all iOS apps submitted to the App Store must be built with the iOS 12.1 SDK or later, included in Xcode 10.1 or later.
译:从2019年3月开始,所有提交到AppStore的iOS应用程序都必须使用iOS12.1的SDK或更高版本,包括在Xcode 10.1或更高版本中。
前言
前段时间迟迟不敢更新最新的 Xcode,就是担心之前维护的老项目会出现比较大的异常。老项目
是 14 年开的,一直维护到现在,中途几经人手,而且项目中用到很多第三方的 SDK,包括一些
对接硬件和视频的东西,添加的依赖关系也比较杂乱,所以我当时的想法就是就只要项目能够正常运行、正常打包、正常上架,能不更新 Xcode 就不更新 Xcode。只是理想很丰满,现实太骨感,在最近一次上架的时候,苹果回了一封邮件,意思是要我用最新的 Xcode 打包上架。所以就只能更新了。当我更新完之后,重新打开项目时,果然,该来的迟早会来的。编译后,红了一大片,只能硬着头皮一个个看,然后在网上找资料,最后总算是将问题都解决了。现将其中一个比较典型的问题分享出来,以便以后查看!
问题描述
当我使用模拟器或者真机进行编译时,提示 libstdc++.6.0.9
这个库找不到。下面是具体报错的截图:

问题分析
由于项目中引用的第三方库中依赖了 libstdc++
这个库,而苹果在 Xcode10 和 iOS12 中移除了 libstdc++
这个库,苹果的解释是 libstdc++
这个库已经标记为废弃5年了,建议大家使用经过了 llvm
优化过的 libc++
库。
解决方案
临时解决方案
手动将 libstdc++
这个库添加到最新的 Xcode 目录中。
可以在更新之前的 Xcode(Xcode9 或之前的版本) 的目录中将 libstdc++
相关的库拷贝出来,然后添加到最新的 Xcode10 的目录中。下面是具体路径:1
2
3
4
5
6
7
8模拟器的目录
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib
真机的目录
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib
动态链接库目录
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib
注:模拟器和真机对应的目录是不同的,需要分别进行拷贝。
为了以后能够方便的进行拷贝,这里将两份文件的压缩包提供出来。
- 将 libstdc++.6.0.9.tbd.zip 解压,放到上面对应的真机的目录下
- 将 libstdc++.6.0.9.tbd_simulator.zip 解压,放到上面对应的模拟器的目录下
- 将 libstdc++.6.0.9.dylib.zip 解压,放到上面对应的动态链接库的目录下
正确解决方案
更改项目的依赖库。
如果你自己的项目需要依赖libstdc++
这个库,那么将依赖的库修改为libc++
。然后重新编译,看是否存在问题。如果是使用的第三方库中依赖了
libstdc++
这个库,那么就需要联系第三方的技术人员,要求他们更新自己的SDK。