.编译过程都做了什么事情
1.C++ OC都是编译语言,编译语言在执行时候,先通过编译器生成机器码,机器码可以直接
在CPU上执行。
2.编译 apple 编译前端 clang 语法分析,语义分析
编译后端,生成机器无关的代码优化。
1. objc. https://www.objccn.io/issue-6-1/
编译过程做了什么事情:
1.https://www.jianshu.com/p/b027a8c4c3a3
- com+b 点击消息,点击build,查看编译信息,
1.如果工程有第三方依赖库,首先会build依赖库target,然后build主target。
compile各个.m文件
copy静态资源,包括img,string,font。
compile xib
compile storyboard
compile asset catalogs
process info.plist
link storyboards
run custom script
touch app
sign app
validate app(真机build有)
3.黏贴complies 一行可以看到CompileC这个文件,
可以看到 -W -c path/main.m -o path/main.o 对应类的编译输出.o
libtool:产生 lib 的工具 构建库
4.https://www.cnblogs.com/lilylee/p/4053926.html
下面的命令用了有一段时日了,下次试一下确认一下如果有错再来编辑原文吧(果然有更新,修改一次)。
利用llvm-gcc很容易得到中间码IR:
llvm-gcc -emit-llvm -c hello.c -o hello.bc (先编译二进制码)
llvm-dis hello.bc (llvm-dis出来的就是IR)
好像llvm-gcc -S -emit-llvm test.c -o test.ll 也是中间码。 .ll的后缀是中间码
利用objdump可以得到机器码:
objdump -S test.o (这里的-S一定是大写)
网友评论