第二课时: Linux开发工具链简介
1. gcc使用-v选项,可以看到许多被隐藏的信息
gcc -o test test.c -v
2. c程序编译过程 预处理->编译成汇编代码->汇编成目标代码->链接
3. 只进行预处理 -E参数
gcc -E -o test.cpp test.c
4. 比较两个文件的前后差异 wc 命令
wc test.c test.cpp
5. -x 根据指定的步骤进行工作,预处理文件到汇编代码cpp-output,生成汇编代码后停止工作-S
gcc -x cpp-output -S -o test.s test.cpp
直接编译得到汇编代码
gcc -S test.c
6. 汇编代码->目标代码 gcc -x assembler -c gcctest.s
直接编译成目标代码 gcc -c gcctest.c
使用汇编器生成目标代码as -o gcctest.o gcctest.s
7.目标代码->执行代码gcc -o gcctest gcctest.o
直接生成执行代码gcc -o gcctest gcctest.c
8.-Wall:打开所有的警告信息
9.优化编译选项:-O0缺省情况,不优化-O1 -O2 -O3等等
gcc -01 -o m1 test.c
10. 使用time命令统计程序的运行 time ./m1
GNU binutils 工具简介
1. ar(建立归档文件(库文件))
(1)假设有两个源程序add.c minus.c,包含两个函数文件
将这两个源程序编译成目标文件
gcc -c add.c minus.c
(2)生成库文件,然后复制到/usr/lib目录下
ar rv libtest.a add.o minus.o
sudo cp libtest.a /usr/lib/
(3) 在其他源代码文件中使用了之前库文件中的函数,在链接时用"-l<name>"指明库文件
gcc -o test test.c -llibtest
/***********这里课件上是-ltest 不知道是否正确**************/
2. nm列出目标文件中的符号
A:符号的值是绝对值,并且不会被将来的链接所改变