Xcode10 关于 libstdc++.6.0.9 的兼容问题

2019-01-25  本文已影响11人  代码移动工程师

Xcode10 关于 libstdc++.6.0.9 的兼容问题

升级Xcode10 后, 项目编译时会报错如下

image

原因是: 苹果早在 Xcode 8中 就废弃了libstdc++, 给了开发者两年时间过渡, 如今在Xcode 10中已不再支持. 在Build Phases > Link Binary With Libraries 中已经搜不到libstdc++的库了

image

Xcode 10 更多特性, 可以参阅这里

解决方案

首先要找到具体是哪个库使用了libstdc++.我的项目是用cocoapods管理第三方,可以在Pods-xxx.xcconfig中, 看到cocoapods 的编译选项有libstdc++6.0.9

image

手动去掉-l"stdc++.6.0.9"后进行编译, 结果如下:

image

可以看到, 问题出在AMapNaviKit这个第三方库, 是高德导航库

解决方法有两个:

由于高德导航库的前后版本相隔较远, 更新后需要修改部分代码, 为了防止因改动代码而影响原有的逻辑, 我选择了第二种方法.

但开发者最好还是用第一种方法,直接更新第三方, 临时方案毕竟只能过渡用, 做苹果开发还是要跟着苹果爸爸的屁股后走的.

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可以不用添加. 但要支持模拟器需要CoreSimulatoriPhoneSimulator两个路径都添加上, 如果只添加了iPhoneSimulator, 可以编译通过, 但运行时会崩溃,如下:

image
上一篇下一篇

猜你喜欢

热点阅读