原文地址链接https://www.jianshu.com/p/61083ef4eb84
升级Xcode10 后, 项目编译时会报错如下
原因是: 苹果早在 Xcode 8中 就废弃了libstdc++, 给了开发者两年时间过渡, 如今在Xcode 10中已不再支持. 在Build Phases > Link Binary With Libraries 中已经搜不到libstdc++的库了
Xcode 10
更多特性, 可以参阅这里解决方案
首先要找到具体是哪个库使用了libstdc++.我的项目是用cocoapods管理第三方,可以在Pods-xxx.xcconfig中, 看到cocoapods 的编译选项有libstdc++6.0.9
手动去掉-l"stdc++.6.0.9"后进行编译, 结果如下:
可以看到, 问题出在AMapNaviKit这个第三方库, 是高德导航库
解决方法有两个:
更新第三方:
- 我的项目中用到的
AmapKitNavi
是很早的2.3.0
的版本,高德导航库的最新版本已经迁移到了libc++
, 故将其更新到最新版本, 即可解决.
- 我的项目中用到的
由于高德导航库的前后版本相隔较远, 更新后需要修改部分代码, 为了防止因改动代码而影响原有的逻辑, 我选择了第二种方法.
但开发者最好还是用第一种方法,直接更新第三方, 临时方案毕竟只能过渡用, 做苹果开发还是要跟着
苹果爸爸
的屁股后走的.
-
-
拷贝
Xcode 9
中的libstdc++.6.0.9
库文件到Xcode 10
中:
- 要同时支持真机和模拟器, 需要将
Xcode 9
中各平台的SDK
中的libstdc++.6.0.9
库, 分别拷贝到Xcode 10
中.注意:libstdc++.6.0.9
各不相同, 可以通过大小看出来, 不要弄错了, 具体路径如下所示
-
拷贝
libstdc++.6.0.9
文件资源可以在百度网盘获取, 提取码:njj8
平台 文件夹 文件名 文件大小 路径
模拟器运行 CoreSimulator libstdc++.6.0.9.dylib 766,624B /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/
模拟器编译 iPhoneSimulator libstdc++.6.0.9.tbd 206,800B /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/
iOS真机 iPhoneOS libstdc++.6.0.9.tbd 209,673B /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/
macAPP MacOSX libstdc++.6.0.9.tbd 206,751B /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/lib/
注意: 如果不做mac开发, MacOSX可以不用添加. 但要支持模拟器需要CoreSimulator 和 iPhoneSimulator两个路径都添加上, 如果只添加了iPhoneSimulator, 可以编译通过, 但运行时会崩溃,如下: