阅读本文需要3分钟
常用编译选项
- -E:预处理,快速定位某个宏可以使用"-E -dM";
- -S:编译后即停止,不进行汇编,对于每个输入的非汇编文件,输出汇编语言文件
- -c:预处理,编译,汇编,但是不链接,编译器根据源文件生成obj文件;
- -o:指定输出文件;
- -I:指定头文件目录;
- -L:指定链接时头文件目录;
- -l:指定链接其中的库文件;
编译多个文件
一起编译链接
gcc -o test a.c b.c
分开编译链接
gcc -c -o a.o a.c
gcc -c -o b.o b.c
gcc -o test a.o b.o
制作和使用动态库
制作
gcc -c -o a.o a.c
gcc -c -o sub.o sub.c
gcc -shared -o libsub.so sub.o //可以使用多个.o文件生成动态库
gcc -o test a.o -lsub -L/libsub.so所在目录
运行
- 把libsub.so复制到板子上的/ lib目录下
- 如果放在其他目录,需要设置环境变量(export LD LIBRARY PATH = / path)
- ./test
制作和使用静态库
gcc -c -o a.o a.c
gcc -c -o sub.o sub.cL
ar crs -o libsub.a sub.o //可以使用多个.o文件生成动态库
gcc -o test a.o -lsub -L/libsub.a所在目录
运行
- 不需要复制libsub.a
- ./test
其他选项
- -Wall:警告选项。输出所有警告信息
- -g:调试选项。以操作系统的本地格式(stabs,COFF,XOFF或DWARF)产生调试信息,GDB能够使用这些调试信息
- -O或-O1:优化选项。对于大函数,优化编译过程会占用稍微多的时间和相当大的内存。不使用优化选项的目的是为了减少编译的体积,使编译结果能够调试,语句独立。
- -O2:多优化了一些。除了涉及空间和速度交换的优化选项,执行了几乎所有的优化工作。和-O或O1比较,即增加了编译时间,也提高了生成代码的运行时间
- -O3:优化的更多。除了打开O2的一切,还打开了-finline-functions选项
- -O0:不优化
- -nostartfiles:不链接系统标准启动文件
- -nostdlib:不链接系统标准启动文件和标准库文件
- -static:仅使用静态库链接
- -share:生成一个共享obj文件