gcc的基本用法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

gcc的基本⽤法linux下gcc的基本⽤法
gcc 是 GUN Compiler Collection的缩写,可以⽀持多种语⾔编译,⽐如 C,C++,Java, pascal 等
gcc的编译过程
预处理(pre-processing)E:插⼊头⽂件,替换宏
编译(Compiling)S:编译成汇编
汇编(Assembling) c:编译成⽬标⽂件
链接(Linking):链接到库中,变成可执⾏⽂件
gcc -E hello.c -o hello.i
gcc -S hello.i –o hello.s
gcc –c hello.s –o hello.o
gcc hello.s –o hello 链接,⽣成可执⾏⽂件
/hello 运⾏
也可以⼀次性完成:
gcc hello.c –o hello
但⼀般情况下⽣成.o⽂件⽐较好,可以重定位⽂件,让别⼈使⽤
gcc常⽤选项
选项名作⽤
o⽣成⽬标
c取消链接步骤,编译源码并最后⽣成⽬标⽂件
E只运⾏C预编译器(头⽂件,宏等展开)
S⽣成汇编语⾔⽂件后停⽌编译(.s⽂件)
Wall打开编译告警(所有)
g嵌⼊调试信息,⽅便gdb调试
llib链接 lib 库(这⾥是⼩写 L )相当于 C++ #pragma comment(lib, “xxx.lib”) Idir增加 include ⽬录 (这⾥是⼤写 i ) 头⽂件路径
LDir增加 lib ⽬录(编译静态库和动态库)
多模块编译
⼀次性编译:
gcc -Wall fun.c main_fun.c –o main_fun
独⽴编译:
gcc –Wall –c main_fun.c –o main_fun.o
gcc –Wall –c fun.c –o fun.o
gcc –Wall main_fun.o fun.o –o main_fun
多模块编译中如果某⼀个模块发⽣了变化,只需要编译更改的模块即可
静态库与共享库(动态库)
静态库(.a)
程序在编译链接时候把库的代码链接到可执⾏⽂件中。

程序运⾏时候,不再需要静态库,⽣成的可执⾏⽂件⼤,每个可执⾏⽂件都会加载⼀份拷贝到内存
静态库⽣成(libxxx.a)
⾸先⽣成.o⽂件,然后通过.o⽂件⽣成.a⽂件
例如:
gcc –c fun.c
ar rcs libfun.a fun.o
静态库使⽤
gcc –Wall main.c libfun.a –o main
gcc –Wall –L. main.c –o main –lfun
-L.表⽰在当前⽬录搜索 libfun.a
静态库搜索路径
1:编译使⽤选项 –L 指定的⽬录(建议)
2:修改环境变量,搜索指定的⽬录设置环境变量 LIBRARY_PATH
export LIBRARY_PATH=“库⽬录”
3:lib⽂件放⼊系统指定⽬录,例如/usr/lib/等
共享库(.so或.sa)
程序运⾏时候才去链接共享库代码,多个程序共享使⽤,使⽤时候只需要加载⼀份到内存
直接可以通过.c⽂件⽣成.so⽂件
例如:gcc –shared –fPIC fun.o –o
shared:⽣成共享库格式
fPIC:产⽣位置⽆关码,允许在任何地址加载 (否则只能从指定地址加载,⽆法控制)相对地址
使⽤: gcc –Wall main.o –o main –L. -lFun
只需要-l+⽂件名即可
配置⽅式
1:拷贝到so⽂件到共享库⽬录 /usr/lib/
2:更改 LD_LIBRARY_PATH,如果已经有了⼀个这样的⽬录,要写成export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:“库⽬录”这样⼦如果写在profile配置⽂件⾥ export LD_LIBRARY_PA TH="⽬录:$LD_LIBRARY_PATH"
3:配置 /etc/ld.so.conf; 并使⽤ ldconfig 命令进⾏更新。

相关文档
最新文档