Linux静态库与动态库
来源:互联网 发布:电信网络客服电话 编辑:程序博客网 时间:2024/06/16 04:39
静态库(.a):
静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。
编译程序时候需要库作依赖,运行时候不需要。(方便,不再需要外部函数库支持)
缺点:
1、因为静态库被链接后直接嵌入可执行程序中,相当于每一个可执行程序里都有一个库的副本,浪费空间;
2、一旦库中有bug,需要重新编译。
创建步骤:
1、编写函数接口(.c)
vim file1.c .......
vim file2.c .......
2、编译成.o文件
gcc -o file1.o -c file1.c
gcc -o file2.o -c file2.c
3、打包成库(库名称以lib开头)
ar -crs libmy.a file1.o file2.o
4、静态库使用(编译程序)
gcc -o main main.c -L. -lmy
5、直接运行
动态库(.so):
共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小。
编译和运行程序都要有库作依赖。
创建步骤:
1、编写函数接口(.c)
vim file1.c .......
vim file2.c .......
2、编译成.o文件
-fPIC:表示生成位置无关代码(Position Independent Code)
gcc -fPIC -o file1.o -c file1.c
gcc -fPIC -o file2.o -c file2.c
3、打包成库(库名称以lib开头)
gcc -shared -fPIC -o libmy.so file1.o file2.o
4、静态库使用(编译程序)
gcc -o main main.c -L. -lmy
5、
①设置lib环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库存放的路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/hgfs/76期/系统编程/005/code/sharedlib
②直接把动态库文件拷贝到/lib或/usr/lib目录下
③在/etc/ld.so.conf文件里加入我们生成的库的目录,然后/sbin/ldconfig
关于/etc/ld.so.conf:
里面存放的是链接器和加载器搜索共享库时要检查的目录,默认是从/usr/lib /lib中读取的,所以想要顺利运行,我们也可以把我们库的目录加入到这个文件中并执行/sbin/ldconfig
6、运行
查看库依赖(ldd):
ldd 文件
看动态库,如果目标程序没有链接动态库,则打印“not a dynamic executable” (不是动态可执行文件)
阅读全文
0 0
- linux 静态库与动态库
- linux下动态库与静态库
- linux中的静态库与动态库
- Linux动态库与静态库
- Linux静态库与动态库制作
- linux 动态库与静态库
- Linux下动态库与静态库
- Linux下动态库与静态库
- linux静态库与动态库制作
- Linux 动态库与静态库
- 动态库与静态库【linux】
- Linux下静态库与动态库
- Linux中的动态库与静态库
- linux 动态库与静态库
- linux动态库与静态库
- Linux静态库与动态库
- [4]Linux静态库与动态库
- linux静态库与动态库
- G
- spring & velocity > context tool
- Thread.yield后线程释放资源的时间节点
- XYNUOJ 1255 寻找最大数—贪心算法
- MAC 利用GIF Brewery来制作Gif图片
- Linux静态库与动态库
- Java_Day14
- LeetCode linked-list-cycle-ii找到链表的环
- HTML5特点及语法结构简介
- 困在栅栏里的凯撒自我理解
- 6.同步互斥机制2及进程间通信机制
- XYNUOJ 1254 汽车加油问题—贪心算法
- ZOJ1003 Crashing Balloon
- 字节序与网络字节序