- gcc 常用选项
选项名 作用
-o 产生目标(.i、.s、.o、可执行文件等)
-c 通知gcc取消链接步骤,即编译源码并在最后生成目标文件
-E 只运行c预编译器
-S 告诉编译器产生汇编语言文件后停止编译,产生的汇编语言文件扩展名为.s
-Wall 使gcc对源文件的代码有问题的地方发出警告
-Idir 将dir目录加入搜索文件的目录路径
-Ldir 将dir目录加入搜索库的目录路径
-llib 连接lib库
-g 在目标文件中嵌入调试信息,以便gdb之类的调试程序调试
- gcc 示例:
gcc -E hello.c -o hello.i(预处理)
gcc -S hello.i -o hello.s(编译)
gcc -c hello.s -o hello.o(汇编)
gcc hello.o -o hello(链接)
gcc hello.c -o hello(直接编译链接成可执行目标文件)
gcc -c hello.c 或 gcc -c hello.c -o hello.o(编译生成可重定位目标文件)
- gcc 编译多文件示例:
hello_fn.h
hello_fn.c
main.c
一次性编译:
gcc hello_fn.c main.c -o newhello
独立编译:
gcc -Wall -c main.c -o main.o
gcc -Wall -c hello_fn.c -o hello_fn.o
gcc -Wall main.o hello_fn.o -o newhello
- 使用外部库(-l 选项)
gcc -Wall calc.c -o calc -lm (-lm 表示要链接libm.so或者libm.a库文件)
静态库(.a):程序在编译链接的时候把库的代码链接到可执行文件中。程序运行的时候将 不再需要静态库
共享库(.so或.sa):程序运行的时候才去链接共享库的代码,多个程序共享使用库的代码。
- 生成静态库:
ar rcs libhello.a hello_fn.o(ar是gun归档工具,rcs表示replace and create)
gcc -Wall main.c libhello.a -o main
gcc -Wall -L. main.c -o main -lhello
- 生成共享库:
gcc -shared -fPIC hello.o -o libhello.so
shared:表示生成共享库格式 fPIC:产生位置无关码(position independent code)
gcc main.o -o main -L. -lhello
l:链接共享库,只要库名即可(去掉lib以及版本号)
L:链接库所在的路径