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