Xcode10 关于 libstdc++.6.0.9 的兼容问题
升级Xcode10 后, 项目编译时会报错如下
image原因是: 苹果早在
imageXcode 8
中 就废弃了libstdc++
, 给了开发者两年时间过渡, 如今在Xcode 10
中已不再支持. 在Build Phases > Link Binary With Libraries
中已经搜不到libstdc++
的库了
Xcode 10
更多特性, 可以参阅这里
解决方案
首先要找到具体是哪个库使用了
imagelibstdc++
.我的项目是用cocoapods
管理第三方,可以在Pods-xxx.xcconfig
中, 看到cocoapods
的编译选项有libstdc++6.0.9
手动去掉
image-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
, 可以编译通过, 但运行时会崩溃,如下:
网友评论