程序生成的四个步骤,Linux动态库与静态库

来源:互联网 发布:王子文身高知乎 编辑:程序博客网 时间:2024/05/11 15:10

程序生成的四个步骤,Linux动态库与静态库

#(个人课堂笔记)

●程序的四个步骤:预处理,编译,汇编,链接(面试题)

预处理:gcc –E demo.c           只进行预处理

gcc –E demo.c > demo.i    将预处理信息写入demo.i  (>表示重定向的意思)

1.头文件展开把#include<stdio.h>展开进.c文件

                    系统存放头文件目录  根目录/user/include

                    #include<stdio.h> 包含的头文件搜索路径是系统的头文件目录,找不到报错

#include”stdio.h” 包含的头文件搜索路径是先在当前.c目录的下找,再到系统的头文件目录找,找不到报错(编译效率低)

2.宏替换    替换宏定义的常量#define

3.条件编译 #if  #endif 可以在编译的时候把一些代码去掉,可

编译:gcc –c demo.c  生成demo.o编译文件 

作用:语法检查和词法分析

汇编:gcc –S demo.c  生成demo.s汇编文件

链接:此步会对文件直接的关联进行检查。如果出错需要返回到1修改代码。直到没有错误,建立符号表,生成目标文件

●gcc 编译后生成a.out文件    这是汇编以后的语言,也就是可执行文件

●arm-linux-gcc demo.c          交叉编译代码:用arm汇编

●file a.out                    显示汇编语言的属性

●自定义”add.h”用户头文件 #include”add.h”

路径不在可执行文件目录时:1. “../add.n”指定头文件路径(源程序指定头文件路径,不利于移植)

2.gcc demo.cadd.c –o demo –I/root/1109 编译时指定第三方搜索路径(大写i)(编译时指定头文件路径,有利于移植)

●gcc demo.c add.c –o demo –I/root -DMAX  在外部指定宏变量MAX(程序内不需要#define)

●Linux库文件:静态库:编译时就把库文件加入程序文件,后缀名为.a(执行速度快,代码容易部署,编译耗时,体积大,执行时占用过多内存,程序升级困难)   

动态库:执行时调用库文件后缀名为.so(反之)

只能使用库文件的变量和函数,但是无法知道如何实现,例如公司售卖的产品

默认库文件目录:/lib目录与/user/lib放的都是Linux的库文件

制作静态库

1.gcc –c add.c         生成编译文件add.o

2.ar rcs libadd.a.add.o  生成libadd.a库文件

3.gcc main.c –ldemo    链接add库(先在系统的库文件搜索) 小写l

4.gcc main.c –ladd –L/root/1111 指定搜索库文件路径

5.read me 使用提示

制作动态库

1.gcc –shared –fPIC –o libadd.so add.c     动态库的创建

2.gcc main.c /root/1111/libadd.so –o add  动态库的使用


0 0
原创粉丝点击