Objective-C开发中Clang的使用
来源:互联网 发布:动感电子相册制作软件 编辑:程序博客网 时间:2024/05/21 17:21
来自我的个人博客Minecode.link
在使用Objective-C开发过程中,尤其在了解某些功能的底层实现时,常用到Clang编译器的命令。在此对常用命令做个简单总结。
Clang的简介
Clang是一个C、C++、Objective-C和Objective-C++编程语言的编译器前端,其后端为底层虚拟机(LLVM)。是一个GCC的替代品,也是Xcode的首选编译器。
通过Clang,我们可以做什么?
- 编译OC代码,这也是它的本职工作。
- 可以将OC代码转化至C++或汇编代码,从而窥探OC某些特性的底层实现。
- 在终端快速编译,占用较少内存,同时具有诊断功能。
编译OC代码
除了使用Xcode编译工程,我们也可以通过Clang来手动编译。
在Xcode中开发项目时,我们知道,Project->Targets->Build Phases->Compile Sources
中对应的文件标记就是指定该文件为ARC/Non-ARC(MRC)。其中ARC对应-fobjc-arc
,MRC对应-fno-objc-arc
。而刚才说到Clang实际就是LLVM的前端,所以我们在clang中使用同样指令指定编译方式。如下指令:
ARC下编译指令 clang -fobjc-arc -framework Foundation main.m -o main
MRC下编译指令 clang -fno-objc-arc -framework Foundation main.m -o main
- -framwork [框架名] 对应所使用的框架
- -o [文件名] 为输出的可执行文件名
我们在.m文件中输出 “Hello,World”
int main(int argc, const char * argv[]) {NSLog(@"Hello, World!");return 0;}
编译OC代码,生成的可执行文件以及终端执行结果如下:
转换为C++代码
OC底层实现为C,所以要研究其属性、消息机制、Runtime等特性,就要用到Clang的代码转化。
将OC的.m文件转化为C++源代码 clang -rewrite-objc main.m
生成的cpp即为OC的底层实现,接下来就是研究其底层实现的工作了。
转换为汇编代码
高级语言最终是要转化为汇编然后转化为01串的,Clang为我们提供了转化为汇编的功能。
将OC的.m文件转化为汇编源代码 clang -S main.m
生成的.s即为对应的汇编实现。
其他指令
由于其他指令并不常见,不再赘述,列举部分以供查阅。
相关资料
- Clang documentation
- Objective-C开发中Clang的使用
- Clang编译Objective-C
- iPhone开发技巧之工具篇(3)--- 使用clang静态解析Objective-C程序
- 使用clang命令行工具编译链接Objective-C应用程序
- 使用clang命令行工具编译链接Objective-C应用程序
- 使用clang命令行工具编译链接Objective-C应用程序
- iOS开发- clang -rewrite-objc的使用
- objective-c 中对于类的使用
- Objective-C中NSValue的使用
- Objective-C中NSValue的使用
- objective-c 中NSDictionary的使用
- Objective-c中线程NSThread的使用
- Objective-C中字符串的使用
- Objective-C中数组的使用
- Objective-C中字典的使用
- Objective-C中NSValue的使用
- objective-c中self的使用
- Objective-C中NSValue的使用
- javascript小案例:制作黑客帝国流星雨
- 浅谈源码编译
- 常用linux命令大全
- LWC 64: 753. Cracking the Safe
- 字符统计
- Objective-C开发中Clang的使用
- ConcurrencyHashMap
- Presto-[13]-Connectors
- 什么是JavaScript闭包?
- jQuery快速入门基础教程之jQuery操作CSS(五)
- 我为什么建议你发年终奖前跳槽?
- Tch智能工业过程监控比赛实例
- Vijos P1986 小h的妹子树二
- SparkStreaming和Kafka集成的两种方式(最全)