Objective-C編譯成C++代碼報(bào)錯(cuò)(clang使用)

看很多的大牛在博客里寫的runtime各種原理實(shí)現(xiàn),剖析各種實(shí)現(xiàn)。直接使用clang來(lái)獲取c++源碼,但是自己實(shí)踐的情況下總是在一些細(xì)節(jié)問題,例如:

clang -rewrite-objc xxx.m

這個(gè)就是一個(gè)由.m 轉(zhuǎn)換為.cpp文件的clang命令,但是自己實(shí)際操作時(shí)是這樣子的:


屏幕快照 2019-04-18 下午11.03.20.png

頓時(shí)一陣抓狂,難道是我操作有問題?不應(yīng)該啊,好多的博客都是這樣的,但是具體的是為什么不行呢?遂在Google上找到各種類似的解決辦法,但都沒有對(duì)癥下藥,無(wú)論嘗試那種辦法都報(bào)'UIKit/UIKit.h' file not found的錯(cuò)。

這個(gè)具體事為什么呢?
實(shí)在想不到更好的方式,只能是慢慢思考這個(gè)問題,從字面意思來(lái)說(shuō)就是依賴的庫(kù)并沒有找到。那這樣的思路是不是就是依賴一下相應(yīng)的庫(kù)就可以呢?依賴的庫(kù)也都是xcode自動(dòng)打包好的,但是在xcode的目錄下是有相應(yīng)的sdk的。所以進(jìn)行一下試想將sdk一起加入到編譯中。由此從網(wǎng)上找了一些關(guān)于類似的方式:

clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk xxxxx.m

實(shí)踐結(jié)果如下


屏幕快照 2019-04-18 下午11.23.30.png

很遺憾,這種方式還是存在一些問題,仔細(xì)查看相關(guān)報(bào)錯(cuò)信息:

屏幕快照 2019-04-18 下午11.32.44.png

這個(gè)UIWebview在Mac下是不可用的。既然不讓這么粗暴的方式調(diào)用,突然想起熟悉又陌生的xcrun,那么結(jié)合xcrun呢?xcrun只有之前寫自動(dòng)化測(cè)試腳本的時(shí)候用到過,知道他的強(qiáng)大。完全可以使用這個(gè)工具完成這個(gè)編譯工作,一頓操作過后......

// 模擬器的情況下
xcrun -sdk iphonesimulator clang -rewrite-objc xxx.m

//真機(jī)的情況下
 xcrun -sdk iphoneos clang -rewrite-objc xxx.m

效果如下:


屏幕快照 2019-04-18 下午11.26.38.png

真香定理,到此,這么一個(gè)簡(jiǎn)單的命令操作完畢,可以繼續(xù)分析相關(guān)的底層實(shí)現(xiàn)原理。其實(shí)大部分mac下的開發(fā),根據(jù)報(bào)錯(cuò)信息經(jīng)過分析信息都可以分析個(gè)八九不離十,在結(jié)合上面向百度編程的思路,大部分都是沒啥問題。如果沒有報(bào)錯(cuò)信息是最坑的。下次在繼續(xù)寫一下最近遇到的坑。

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

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