分类: C/C++
2012-08-09 16:43:19
1)首先需要生成目标文件example.o add.o modify.o delete.o
$gcc –c example.c
$gcc –c add.c
$gcc –c modify.c
$gcc –c delete.c
链接4个目标文件,生成可执行文件example
$ gcc example.o add. o modify.o delete.o –o example
2)或者直接使用命令:
$ gcc example.c add. c modify.c delete.c –o example
3)预处理阶段
$ gcc -E hello.c -o hello.i //将stdio.h编译进来
4)编译阶段
$ gcc -S hello.i -o hello.s //只进行编译而不进行汇编
5)汇编阶段
$ gcc -c hello.s -o hello.o
6)链接阶段
$ gcc hello.o -o hello //gcc到系统默认'/usr/lib'查找,链接libc.so.6库函数
静态库与动态库
1) 创建静态库
$ ar cr libmyhello.a hello.o //前缀lib,扩展.a,输入.o二进制文件
选项解析:
[c] do not warn if the library had to be created
[r] replace existing or insert new files(s) into the archive
2)使用静态库
$gcc -o hello main.c -L. -lmyhello //-L dir添加搜索路径
3)使用动态库
$gcc -shared -fPCI -o libmyhello.so hello.o
$gcc -o hello main.c -L. -lmyhello //将.so复制到/usr/lib中
注:静态库和动态库同名,优先动态库
$ldd program //program需要使用的动态库
$ldconfig //增加共享动态库,更新操作
#info ls //info命令使用Ctrl+H 帮助
-O0 ,-O1
优化选项4个级别,0表示没有优化
-w 忽略gcc的警告信息
-Wall 显示所有的警告信息
-werror 把所有警告转换成错误
-static 禁止使用动态库
-traditional 试图让编译器支持K&R语言特性
-pedantic 允许发出ANSI/ISO C标准所列出的所有警告、错误
-ansi 支持ANSI/ISO C的标准语法
-M 生成文件关联信息,包含目标文件所依赖的所有源文件
-MM 与-M相同,但是它将忽略由#include造成的依赖关系
-MD 与-M相同,但是输出将导入到.d的文件中
pkg-config命令,帮助我们自动提供给gcc编译和连接使用参数
$pkg-config --list-all //列出系统内可使用的软件包
$gcc -o test test.c 'pkg-config gtk+-2.0 --cflags --libs'
//gcc编译过程中使用方法,获得链接某个软件库的编译参数和链接参数
PKG_CONFIG_PATH环境变量可以帮助pkg-config命令搜索pc文件路径,可以方便我们跨平台的程序开发,交叉编译某些特定平台的程序