1. 程式人生 > >cpp 轉換 fatal error: 'UIKit/UIKit.h' file not found

cpp 轉換 fatal error: 'UIKit/UIKit.h' file not found

$ clang -rewrite-objc main.m  這樣操作會報

解決方案一:

fatal error: 'UIKit/UIKit.h' file not found
#import <UIKit/UIKit.h>
        ^~~~~~~~~~~~~~~
1 error generated.

解決

將之前執行的命令替換成為:

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

然後, 你會發現, 你的資料夾中多了一個.cpp的檔案, 證明解決了這個問題。

拓展

如果你覺得這個命令很繁瑣不易記, 你可以採用 alias來起一個別名來代替這個命令。 
1.開啟終端, 鍵入命令 vim ~/.bash_profile
2.在vim介面輸入i進入編輯編輯狀態並且鍵入: 

alias rewriteoc=’clang -x objective-c -rewrite-objc -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk’

3.鍵入完畢後, esc退出編輯狀態, 再鍵入:wq退出vim並儲存 
4.鍵入命令source ~/.bash_profile

參考資料: 
iOS: XCode 4.5: xcodebuild error - fatal error: ‘UIKit/UIKit.h’ file not found

全文地址請點選:https://blog.csdn.net/wangyanchang21/article/details/79608668?utm_source=copy 

https://blog.csdn.net/majiakun1/article/details/52842010

 

==================================================================================

 

解決方案2: (簡單) 以main.m 為例

第一步: cd 到需要轉換的資料夾(一定要cd到要轉換類所在的檔案).      /Users/youxin/Desktop/BlockTest/BlockTest

第二部 :

     a : 如果是模擬器 :$  xcrun -sdk iphonesimulator clang -rewrite-objc main.m

     b:真機 : $ xcrun -sdk iphoneos clang -rewrite-objc main.m

    c : 真機 +模擬器 有預設版本的 :$  xcrun -sdk iphonesimulator9.3 clang -rewrite-objc main.m

clang -rewrite-objc的作用是把oc程式碼轉寫成c/c++程式碼,我們常用它來窺探OC的一些祕密。 

//下面是原文和連結:

1、最簡單的例子

main.m的程式碼如下: 

開啟終端,來到main.m所在目錄,執行如下命令: 
執行之後,目錄下多出一個main.cpp檔案,開啟一看,一兩百行程式碼。其關鍵程式碼如下: 

enter image description here

這個例子是用來研究block的原理的,在網上能搜到,本文無意解釋這些程式碼。 

2、指定SDK

有的oc程式碼要轉成c程式碼時,在真機和模擬器上差別還是挺大的。如果需要指定SDK,那麼要結合xcrun命令,例如指定真機: 

如果要指定模擬器: 

模擬器和真機都有預設的SDK版本,也可以指定具體某版本: 

當然,你要先看看你機器上都裝哪些SDK,xcodebuild命令可以完成這個任務:

2.png

3、指定framework

如果使用了第三SDK,例如(main.m檔案): 

程式碼中使用了聽雲的SDK,這時執行clang -rewrite-objc ,結果如下: 

3.png

出錯了,忘記引入聽雲的這個framework了,clang不知到何處去找,這時需要用-F開關告訴它。 

執行命令,OK,成功了。 

以上示例都是為了儘可能簡單,實際上可以同時指定多個原始檔、多個framework。 

分享即快樂。 

clang--rewrite-objc

原文連結:http://www.ituring.com.cn/article/217522