-E:仅作预处理,不进行编译、汇编和链接,头文件、宏等展开(.i文件)
-S:预处理、编译;生成汇编代码(.s文件)
-c:预处理、编译、汇编;生成目标文件(.o文件)
-o:执行命令后生成文件的名称
-g:嵌入调试信息,方便gdb调试
-w:不生成任何警告
-Wall:生成所有的警告
-llib:链接 lib 库 (这里是小写 L ) 相当于 C++ #pragma comment(lib, “xxx.lib”)
-Idir:增加 include 目录 (这里是大写 i ) 头文件路径
-LDir:增加 lib 目录 (编译静态库和动态库)
分解步骤:
# 预处理,生成 hello.i 文件
gcc -E hello.c -o hello.i
# 编译,生成 hello.s 文件
gcc –S hello.i –o hello.s
# 链接,生成 hello.o 文件
gcc –c hello.s –o hello.o
# 生成可执行文件, 生成 hello 文件
gcc hello.o –o hello
一次生成可执行文件:
gcc hello.c –o hello
生成共享库:
gcc –shared –fPIC fun.o –o libFun.so
#此时生成 libFun.so 共享库
shared:生成动态库格式。
fPIC: 产生位置无关码,允许在任何地址加载相对地址,否则只能从指定地址加载,无法控制。
使用共享库:
gcc –Wall main.o –o main –L. -lFun
#此时生成 Program1.o目标文件
–L.:增加库文件搜索目录(当前文件)
-lFun:使用动态库,只需要 -l + 文件名即可。