蘋果在 XCode10 和 iOS12 中移除了?libstdc++?這個(gè)庫妥凳,由?libc++?這個(gè)庫取而代之,蘋果的解釋是?libstdc++?已經(jīng)標(biāo)記為廢棄有5年了帜慢,建議大家使用經(jīng)過了 llvm 優(yōu)化過并且全面支持C++11的?libc++?庫。
當(dāng)然有很多臨時(shí)解決辦法,大家可以去網(wǎng)上搜索一下花枫,無非是把libstdc++庫拷貝到XCode12的sdk和模擬器里(真機(jī)為了兼容老版本,是有l(wèi)ibstdc++庫的)掏膏。
如果你依賴的第三方庫是依賴stdc++的劳翰,如果有源碼最好了,如果沒有源碼馒疹,那你只能期待第三方比較勤奮了佳簸。。颖变。
下面主要說一下這個(gè)從libstdc++到libc++生均,需要改哪些東西:
xcode工程配置:
Targets--->Build Settings--->Apple Clang - Language - C++ --->C++ Standard Library,修改為libc++
C++類庫編譯:
編譯參數(shù):
-stdlib=libstdc++修改為-stdlib=libc++
另外建議加入-miphoneos-version-min=8.0 -fembed-bitcode(支持bitcode)這兩個(gè)選項(xiàng)
宏定義:
MACRO_DEF+=-D_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR
MACRO_DEF+=-D_LIBCPP_ENABLE_TUPLE_IMPLICIT_REDUCED_ARITY_EXTENSION
代碼腥刹,由于某些std類庫命名空間马胧,以及一些用法變化,所以要做相應(yīng)的修改:
例如std::tr1::空間不存在衔峰,可以修改為std::
? ? #ifdef __APPLE__? ?
????????????????#define AUTO(x, y) auto x = y? ?
????????????????#define TYPEOF(x)? ? decltype(x)? ?
????????????????#define TR1_FUNCTIONAL?<functional>? ?
????????????????#define TR1_TUPLE?<tuple>? ?
????????????????#define TR1_MEMORY?<memory>? ?
????#else? ?
????????????????#define AUTO(x, y) typeof(y) x = y? ?
????????????????#define TYPEOF(x)? ? typeof(x)? ?
????????????????#define TR1_MEMORY?<tr1/memory>? ?
????????????????#define TR1_FUNCTIONAL ?<tr1/functional>? ?
????????????????#define TR1_TUPLE?<tr1/tuple>? ?
#endif
基本上主要修改就是這些佩脊,在移植過程中遇到很多編譯的坑,不過還好都一一解決了垫卤,如果大家遇到什么編譯問題威彰,可以留言,看看我是否遇到過穴肘。
已經(jīng)編譯過的第三方類庫包括freetype jbig2dec jpeg openjpeg skiabasic webp harfbuzz