您的位置:首页 > 其它

静态库和动态库的使用

2013-08-14 23:13 190 查看
静态库和动态库的创建

一.概述

什么是库? 说到底库就是一种可执行代码的二进制文件,但是它本身不能执行。

静态库在程序编译的时候会被连接到目标文件中,程序运行时不再需要该静态库。

动态库在程序编译时并不会连接到目标文件中,而是在程序运行时才会装入,因此程序运行时还是需要动态库存在。

二.静态库和动态库的区别

1. 优点

1) 静态库

程序独立性较强,只要编译好之后,就不在需要库文件。

2) 动态库

空间占用小, 方便升级,程序升级可以只升级库文件,而程序框架保持不变; 可以通过动态库实现进程之间的数据共享; 可在代码中实现动态库加载的控制; 不同程序调用相同的库,在内存中只需要一份该库的实例。

当然这两个库都有一个共同优点,就是保护了软件的安全性,隐藏了源代码。

2. 缺点

1) 静态库

空间占用较大, 升级需要整个程序重新编译连接。

2) 动态库

对动态库的依赖较强,无论是在编译还是运行时,都可能由于环境配置不正确导致失败。

三.如何生成静态库和动态库

1. 如何生成静态库

ar crs libxxxx.a (xxxx是库的名字,其余是固定格式) xxx.o

2. 如何生成动态库

gcc -fPIC -Wall xxxx.c -shared -o libxxxx.so

四.如何使用库

1. 编译时如何使用静态库

gcc main.c -L. –lxxxx

-L 指定你要连接的库的目录在哪里, -l 指定你要连接的库的名字

当然你也可以将你生成的库放在系统默认库目录下,如/usr/lib

2. 编译时如何使用动态库

1) 将你生成的库放入系统库目录下

2) 编译时这样使用 gcc main.c libxxxx.so

3) gcc main.c -L. -lxxxx

3. 执行程序时如何使用动态库

1) 将你生成的库放入系统库目录下

2) 修改环境变量export LD_LIBRARY_PATH=你库文件的位置

3) 添加/etc/ld.so.conf.d/*.conf 然后调用ldconfig 刷新库文件加载目录

五.相关指令

1. printenv echo

可以使用这两个命令查看 环境变量

printenv LD_LIBRARY_PATH

echo $LD_LIBRARY_PATH

2. ldd

可以使用这个命令查看,某个可执行程序使用了那些动态库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: