原文地址鏈接http://www.reibang.com/p/61083ef4eb84
升級Xcode10 后, 項(xiàng)目編譯時(shí)會報(bào)錯(cuò)如下
原因是: 蘋果早在 Xcode 8中 就廢棄了libstdc++, 給了開發(fā)者兩年時(shí)間過渡, 如今在Xcode 10中已不再支持. 在Build Phases > Link Binary With Libraries 中已經(jīng)搜不到libstdc++的庫了
Xcode 10
更多特性, 可以參閱這里解決方案
首先要找到具體是哪個(gè)庫使用了libstdc++.我的項(xiàng)目是用cocoapods管理第三方,可以在Pods-xxx.xcconfig中, 看到cocoapods 的編譯選項(xiàng)有l(wèi)ibstdc++6.0.9
手動去掉-l"stdc++.6.0.9"后進(jìn)行編譯, 結(jié)果如下:
可以看到, 問題出在AMapNaviKit這個(gè)第三方庫, 是高德導(dǎo)航庫
解決方法有兩個(gè):
更新第三方:
- 我的項(xiàng)目中用到的
AmapKitNavi
是很早的2.3.0
的版本,高德導(dǎo)航庫的最新版本已經(jīng)遷移到了libc++
, 故將其更新到最新版本, 即可解決.
- 我的項(xiàng)目中用到的
由于高德導(dǎo)航庫的前后版本相隔較遠(yuǎn), 更新后需要修改部分代碼, 為了防止因改動代碼而影響原有的邏輯, 我選擇了第二種方法.
但開發(fā)者最好還是用第一種方法,直接更新第三方, 臨時(shí)方案畢竟只能過渡用, 做蘋果開發(fā)還是要跟著
蘋果爸爸
的屁股后走的.
-
-
拷貝
Xcode 9
中的libstdc++.6.0.9
庫文件到Xcode 10
中:
- 要同時(shí)支持真機(jī)和模擬器, 需要將
Xcode 9
中各平臺的SDK
中的libstdc++.6.0.9
庫, 分別拷貝到Xcode 10
中.注意:libstdc++.6.0.9
各不相同, 可以通過大小看出來, 不要弄錯(cuò)了, 具體路徑如下所示
-
拷貝
libstdc++.6.0.9
文件資源可以在百度網(wǎng)盤獲取, 提取碼:njj8
平臺 文件夾 文件名 文件大小 路徑
模擬器運(yùn)行 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真機(jī) 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開發(fā), MacOSX可以不用添加. 但要支持模擬器需要CoreSimulator 和 iPhoneSimulator兩個(gè)路徑都添加上, 如果只添加了iPhoneSimulator, 可以編譯通過, 但運(yùn)行時(shí)會崩潰,如下: