從libstdc++到libc++

蘋果在 XCode10 和 iOS12 中移除了?libstdc++?這個庫,由?libc++?這個庫取而代之,蘋果的解釋是?libstdc++?已經(jīng)標記為廢棄有5年了,建議大家使用經(jīng)過了 llvm 優(yōu)化過并且全面支持C++11的?libc++?庫。

當然有很多臨時解決辦法,大家可以去網(wǎng)上搜索一下,無非是把libstdc++庫拷貝到XCode12的sdk和模擬器里(真機為了兼容老版本,是有l(wèi)ibstdc++庫的)。

如果你依賴的第三方庫是依賴stdc++的,如果有源碼最好了,如果沒有源碼,那你只能期待第三方比較勤奮了。。。

下面主要說一下這個從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)這兩個選項

宏定義:

MACRO_DEF+=-D_LIBCPP_ENABLE_CXX17_REMOVED_AUTO_PTR

MACRO_DEF+=-D_LIBCPP_ENABLE_TUPLE_IMPLICIT_REDUCED_ARITY_EXTENSION

代碼,由于某些std類庫命名空間,以及一些用法變化,所以要做相應的修改:

例如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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容