Chinaunix首页 | 论坛 | 博客
  • 博客访问: 419179
  • 博文数量: 79
  • 博客积分: 2886
  • 博客等级: 少校
  • 技术积分: 968
  • 用 户 组: 普通用户
  • 注册时间: 2008-05-16 10:33
文章分类

全部博文(79)

文章存档

2013年(7)

2012年(17)

2011年(28)

2010年(25)

2009年(1)

2008年(1)

我的朋友

分类: LINUX

2010-01-04 15:23:10

 
GCC编译的四个阶段:预处理(Pre-Processing)编译(Compiling)汇编(Assembling) 链接(Linking)
 
第一步是进行预编译,使用-E参数可以让GCC在预处理结束后停止编译过程:
 #  gcc -E hello.c -o hello.i
第二步是将hello.i编译为目标代码,这可以通过使用-c参数来完成:
 #  gcc -c hello.i -o hello.o
 GCC默认将.i文件看成是预处理后的C语言源代码,
第三步是将生成的目标文件链接成可执行文件:
 #  gcc hello.o -o hello
part2:
将这几个文件编译成一个动态库:libtest.so
$ gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so
-shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件。
-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。
 
 
阅读(513) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~