Chinaunix首页 | 论坛 | 博客
  • 博客访问: 117309
  • 博文数量: 31
  • 博客积分: 781
  • 博客等级: 军士长
  • 技术积分: 350
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-30 16:52
文章分类

全部博文(31)

文章存档

2014年(1)

2012年(9)

2011年(21)

分类: 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文件路径,可以方便我们跨平台的程序开发,交叉编译某些特定平台的程序

阅读(1389) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~