1,示例程序
示例程序来源《Beginning Linux Programming》2nd Edition, chapter01:
bill.c
- #include <stdio.h>
- void bill (char *arg)
- {
- printf("bill: you passed %s\n", arg);
- }
fred.c
- #include <stdio.h>
- void fred(int arg)
- {
- printf("fred: you passed %d\n", arg);
- }
lib.h
- /*
- This is lib.h. It declares the functions fred and bill for users
- */
- void bill(char *);
- void fred(int);
program.c
- #include "lib.h"
- int main()
- {
- bill("Hello World");
- exit(0);
- }
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,编译
- gcc -c bill.c fred.c
- ar -r libm.a bill.o fred.o
- 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) |