关于库文件的制作和区别
2016-07-07 11:38
260 查看
1、Linux系统的库函数
库函数是保存在库文件里面,看不到库文件定义的函数和使用,但是可以实现功能。
2、 库文件的分类
库文件分为动态库和静态库两种。
a. 静态库
后缀为.a ,在编译时将库文件的代码搬迁到可执行文件中。
b. 动态库
后缀为.so ,在执行的时候,才将需要的代码搬迁到可执行文件中。
所以执行静态库编译的程序的时候,不需要头文件的定义。而执行动态库编译的程序的时候,没有头文件的定义,则不能运行该程序!
其中libadd.a为静态库文件,libadd.so为动态库文件。
3、静态库与动态库的优缺点:
a. 静态库的可执行代码体积大,而动态库的可执行代码体积小。
b. 静态库的运行效率高,而动态库的运行效率低。
c. 静态库不易于升级,而动态库易于升级。
d. 静态库的编译效率低,而动态库的编译效率高。
e. 静态库的代码布局更好,而动态库的代码布局不好。
4、静态库文件的制作过程:
a. gcc -c add.c 生成add.o文件
b. ar rcs libadd.a add.o 生成libadd.a文件
c. gcc main.c -ladd -L 库文件位置(编译加入库文件)
d. ./add(运行程序)
5、动态库文件的制作过程:
a. gcc -shared -fPIC add.c -o libadd.so 生成libadd.so文件
b. gcc main.c ./libadd.so -L 库文件位置 -o add(编译加入库文件)
c. ./add(运行程序)
库函数是保存在库文件里面,看不到库文件定义的函数和使用,但是可以实现功能。
2、 库文件的分类
库文件分为动态库和静态库两种。
a. 静态库
后缀为.a ,在编译时将库文件的代码搬迁到可执行文件中。
b. 动态库
后缀为.so ,在执行的时候,才将需要的代码搬迁到可执行文件中。
所以执行静态库编译的程序的时候,不需要头文件的定义。而执行动态库编译的程序的时候,没有头文件的定义,则不能运行该程序!
[root@localhost 0706]# ls 0706_ add.c add.o include libadd.a libadd.so main main.c
其中libadd.a为静态库文件,libadd.so为动态库文件。
3、静态库与动态库的优缺点:
a. 静态库的可执行代码体积大,而动态库的可执行代码体积小。
b. 静态库的运行效率高,而动态库的运行效率低。
c. 静态库不易于升级,而动态库易于升级。
d. 静态库的编译效率低,而动态库的编译效率高。
e. 静态库的代码布局更好,而动态库的代码布局不好。
4、静态库文件的制作过程:
a. gcc -c add.c 生成add.o文件
[root@localhost 0707]# gcc -c add.c [root@localhost 0707]# ls add.c add.h add.o main.c
b. ar rcs libadd.a add.o 生成libadd.a文件
[root@localhost 0707]# ar rcs libadd.a add.o [root@localhost 0707]# ls add.c add.h add.o libadd.a main.c
c. gcc main.c -ladd -L 库文件位置(编译加入库文件)
[root@localhost 0707]# gcc main.c -ladd -L /home/07/0707/ -o add [root@localhost 0707]# ls add add.c add.h add.o libadd.a main.c
d. ./add(运行程序)
[root@localhost 0707]# ./add sum = 9
5、动态库文件的制作过程:
a. gcc -shared -fPIC add.c -o libadd.so 生成libadd.so文件
[root@localhost 0707]# gcc -shared -fPIC add.c -o libadd.so [root@localhost 0707]# ls add add.c add.h add.o libadd.a libadd.so main.c
b. gcc main.c ./libadd.so -L 库文件位置 -o add(编译加入库文件)
[root@localhost 0707]# gcc main.c ./libadd.so -o add -L. [root@localhost 0707]# ls add add1 add.c add.h add.o libadd.a libadd.so main.c
c. ./add(运行程序)
[root@localhost 0707]# ./add sum = 9
相关文章推荐
- 深入探讨Linux静态库与动态库的详解(一看就懂)
- linux生成(加载)动态库静态库和加载示例方法
- Visual Studio中根据系统区分引用64位、32位DLL动态库文件的配置方法
- iOS创建与使用静态库
- xcode 4 制作静态库图文详解
- (转)Linux如何解决动态库的版本控制
- Xcode中创建静态库,使用Target支持不同平台
- linux动态库的入口和出口函数
- iOS 开发——生成.a文件
- linux 下静态库和动态库详解
- iOS 创建静态库
- 动态库
- linux中的动态库和静态库
- 静态链接与动态链接的异同
- Windows下java调用c的dll动态库--Dev_Cpp编译c生成dll
- Linux下创建和使用静态库、共享库的方法总结
- 关于Unix静态库和动态库的分析
- C++ 实践之动态库完整实现
- VS2010上编译opencv3.1.0的32位静态链接库(动态链接库)
- 运行时库以及静态库,动态库之间的关系