-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 + 文件名即可。