clang -rewrite-objc的使用點滴
原文出自【聽雲技術部落格】:http://blog.tingyun.com/web/article/detail/845
clang -rewrite-objc的作用是把oc程式碼轉寫成c/c++程式碼,我們常用它來窺探OC的一些祕密。
1、最簡單的例子
main.m的程式碼如下:
int main(int argc, char * argv[]) {
int i=1 ;
__blockint j=0;
void(^aBlock)(void)=^{
j+=2*i;
};
aBlock();
return 0; }
開啟終端,來到main.m所在目錄,執行如下命令:
clang -rewrite-objc main.m
執行之後,目錄下多出一個main.cpp檔案,開啟一看,一兩百行程式碼。其關鍵程式碼如下:
這個例子是用來研究block的原理的,在網上能搜到,本文無意解釋這些程式碼。
2、指定SDK
有的oc程式碼要轉成c程式碼時,在真機和模擬器上差別還是挺大的。如果需要指定SDK,那麼要結合xcrun命令,例如指定真機:
xcrun -sdk iphoneos clang -rewrite-objc main.m
如果要指定模擬器:
xcrun -sdk iphonesimulator clang -rewrite-objc main.m
模擬器和真機都有預設的SDK版本,也可以指定具體某版本:
xcrun -sdk iphonesimulator9.3 clang -rewrite-objc main.m
當然,你要先看看你機器上都裝哪些SDK,xcodebuild命令可以完成這個任務:
3、指定framework
如果使用了第三SDK,例如(main.m檔案):
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
#import <tingyunApp/NBSAppAgent.h>//第三方SDK,聽雲的SDK
int main(int argc, char * argv[]) {
@autoreleasepool {
[NBSAppAgent startWithAppID:@"xxxxxxxxxxxxxx”];//啟動聽雲的SDK
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegateclass]));
}
}
程式碼中使用了聽雲的SDK,這時執行clang -rewrite-objc ,結果如下:
出錯了,忘記引入聽雲的這個framework了,clang不知到何處去找,這時需要用-F開關告訴它。
tingyunApp.framework在/Users/goanywhere/Downloads/nbs-newlens-ios-2.3.6下,於是修改指令為:
xcrun -sdk iphonesimulator9.3 clang -rewrite-objc –F /Users/goanywhere/Downloads/nbs-newlens-ios-2.3.6 main.m
執行命令,OK,成功了。
以上示例都是為了儘可能簡單,實際上可以同時指定多個原始檔、多個framework。
分享即快樂。
相關文章
- Clang -rewrite-objcOBJ
- mailx使用點滴AI
- Dev-C++使用點滴 (轉)devC++
- asm點滴ASM
- oracle點滴Oracle
- CentOS 7 x64 docker 使用點滴CentOSDocker
- sql server 2005使用點滴(1)SQLServer
- clang的編譯器有點智慧編譯
- 一點一滴記錄 Java 8 stream 的使用Java
- ubuntu下設定clion是使用clang和clang++Ubuntu
- 工作點滴積累
- lzma 知識點滴
- 前端點滴記錄前端
- 專題:點滴JavascriptJavaScript
- hp-ux點滴UX
- RedHatLinux使用者管理經驗點滴(轉)RedhatLinux
- 生活點滴小筆記筆記
- Django之學習點滴Django
- Mac | 技巧點滴記錄Mac
- 技術點滴記錄
- Laravel 初學者學習點滴Laravel
- 前端技術點滴整理-1前端
- 架構之路(七)MVC點滴架構MVC
- 物化檢視知識點滴
- 研發專案管理點滴專案管理
- windows上使用clang編譯程式Windows編譯
- Ubuntu的點滴-Vim、VM Tools、Samba、換源UbuntuSamba
- 小程式開發點滴積累
- 微信公眾號開發點滴
- 函式式點滴--partial&curry函式
- VB程式設計經驗點滴程式設計
- 自制迷你路由器過程中的點滴路由器
- sql點滴42—mysql中的資料結構MySql資料結構
- sql點滴42—mysql中的時間轉換MySql
- DB2使用經驗點滴(2008/10/31更新)DB2
- vc 學習點滴之終結篇
- Win32ASM經驗點滴 (轉)Win32ASM
- 程式設計技術點滴一(Delphi)程式設計