文件名形如 libxxx.so,其中so是 Shared Object 的缩写,即可以共享的目标文件。
生成动态库常用 gcc 命令;
举例:
编写头文件:ok.h 文件
#ifndef __OK_H__#define __OK_H__
voidok();#endif
编写 ok.c 文件
#include "ok.h"
int main(int argc, char** argv) {
ok();return 0;
}
生成动态库
gcc –fPIC –shared –o libok.so ok.c
编写 test.c 测试文件
#include "ok.h"
int main(int argc, char argv**) {
ok();return 0;
}
利用动态库生成可执行文件;
gcc -o Out test.c -L ./ –l ok
注意:上面中的 –L :追加目录到库文件的搜索路径中; –l :指定使用的库文件,其中的库名 将前缀lib和后缀.a(或.so)省略。
现在运行:Out 可执行文件;
yinheyi@ubuntu:~/play$ ./Out
./Out: error while loading shared libraries: libok.so: cannot open shared object file: No such file or directory
先解决存在问题:这个Out 运行时,它的库的搜索路经不包括当前目录吧(上面用-L 追加的目录只用于生成Out文件的,和运行时没有关系),所以呢,
1. 我们可以把 libok.so 库文件放到搜索目录中去:/usr/lib 或 /lib;
2.也可以临时添加当前搜索路经:
export LD_LIBRARY_PATH=`pwd`
3. 配置文件/etc/ld.so.conf中指定的动态库搜索路径;动态装入器将在其中查找共享库。注意: /etc/ld.so.conf 中并不必包含 /lib 和 /usr/lib,因为ldconfig程序会自动搜索这两个目录。
1)把库路经放入 /etc/ld.so.conf文件中;
2)运行ldconfig 生成最新的 /etc/ld.so.cache 文件;
本文采用方法二以后再次运行,成功:
yinheyi@ubuntu:~/play$ ./Out
Are you OK??