Chinaunix首页 | 论坛 | 博客
  • 博客访问: 444730
  • 博文数量: 67
  • 博客积分: 2468
  • 博客等级: 上尉
  • 技术积分: 1050
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-05 01:21
文章分类

全部博文(67)

文章存档

2013年(1)

2012年(65)

2011年(1)

分类: C/C++

2012-03-21 23:28:45

1,示例程序
示例程序来源《Beginning Linux Programming》2nd Edition, chapter01:
bill.c

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. void bill (char *arg)
  3. {
  4.     printf("bill: you passed %s\n", arg);
  5. }

fred.c

点击(此处)折叠或打开

  1. #include <stdio.h>

  2. void fred(int arg)
  3. {
  4.     printf("fred: you passed %d\n", arg);
  5. }

lib.h

点击(此处)折叠或打开

  1. /*
  2.     This is lib.h. It declares the functions fred and bill for users
  3. */

  4. void bill(char *);
  5. void fred(int);

program.c

点击(此处)折叠或打开

  1. #include "lib.h"

  2. int main()
  3. {
  4. bill("Hello World");
  5. exit(0);
  6. }

2,gcc基本知识
几个选项:
gcc -E filename.c -o file_name.i   进行预编译的结果输出到了终端上,因而需要重定向,或者指明输出的文件名(-o选项)。--> *.i的文件。

gcc -S filename.i 编译后即停止,不进行汇编.对于每个输入的非汇编语言文件,输出文件是汇编语言文件.这里会自动生成filename.s。--> *.s的文件。

gcc -c 编译或汇编源文件,但是不作连接.编译器输出对应于源文件的目标文件.(-C告诉编译器不要丢掉注释)。--> *.o的文件。

gcc -o output_name  指定输出文件为file.该选项不在乎GCC产生什么输出,无论是可执行文件,目标文件,汇编文件还是预处理后的C代码.--> 可执行的二进制文件。

-l(library)   连接名为library的库文件.连接器在标准搜索目录中寻找这个库文件,库文件的真正名字是`lib(library).a'.连接器会 当做文件名得到准确说明一样引用这个文件.

-L(dir)  在`-L选项的搜索路径列表中添加dir目录.

-static  在支持动态连接(dynamic linking)的系统上,阻止连接共享库.该选项在其他系统上无效.

-shared  生成一个共享目标文件,他可以和其他目标文件连接产生可执行文件.只有部分系统支持该选项.

3,编译

点击(此处)折叠或打开

  1. gcc -c bill.c fred.c
  2. ar -r libm.a bill.o fred.o
  3. gcc program.c -L. -lm -o program
得到产生的可执行的program程序,是动态链接的。
gcc -static program.c -L. -lm -o program_static 产生静态链接的程序。可以比较program和program_static的大小,帮助理解。

P.S.
本来基础就不好,动手少。各位大侠看到莫笑……
编译可以写成Makefile吧,我现在只会写简单的。带有ar的现在我还没有处理过。
晚安~


阅读(5062) | 评论(0) | 转发(0) |
0

上一篇:面试经历

下一篇:C++库介绍-标准库、类库

给主人留下些什么吧!~~