库是一种可执行的二进制文件,是编译好的代码。使用库可以提高开发效率。在 Linux 下有静态库和动态库。 静态库在程序编译的时候会被链接到目标代码里面。所以程序在运行的时候不再需要静态库了。因此编译出来的体积就比较大。以 lib 开头,以.a 结尾。 动态库(动态库也叫共享库)在程序编译的时候不会被链接到目标代码里面,而是在程序运行的时候被载入的。所以程序在运行的时候需要动态库了。因此编译出来的体积就比较小。以 lib 开头,以.so 结尾。 静态库的制作步骤: - 编写或准备库的源代码
- 将源码.c 文件编译生成.o 文件
- 使用 ar 命令创建静态库
- 测试库文件
动态库制作步骤: - 编写或准备库的源代码
- 将源码.c 文件编译生成.o 文件
- 使用 gcc 命令创建动态库
- 测试库文件
静态库新建 mylib.c 文件: #includevoid mylib(void);void mylib(void){ printf("This is mylib
");}
在 Ubuntu 编译 编写测试代码 test.c #include void mylib(void);int main(void){ mylib(); return 0;}
编译测试文件 test.c 运行测试 a.out 动态库新建 mylib.c 文件 #includevoid mylib(void);void mylib(void){ printf("This is mylib
");}
在 Ubuntu 编译 编写测试代码 test.c #include void mylib(void);int main(void){ mylib(); return 0;}
编译测试文件 test.c -l:指定动态库的库名-L:指定动态库的查找位置。-L . 表示在当前目录下去查找
运行测试 a.out 在动态库使用是,系统会默认去/lib,/usr/lib 目录下去查找动态函数库,如果我们使用的库不在里面,就会提示错误。解决这个问题有三种方法。 第一种方法: 将生成的动态库拷贝到/lib 或者/usr/lib 里面去,因为系统会默认去这两个路径下寻找。 第二种方法: 把我们的动态库所在的路径加到环境变量里面去,比如我们动态库所在的路径为/home/test,我们就可以这样添加,但是这种方法只在当前设置的窗口有效。 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/topeet/debug/linux_
我们加入环境后,运行 a.out 第三种方法: 修改 ubuntu 下的配置文件/etc/ld.so.conf,我们在这个配置文件里面加入动态库所在的位置,然后使用命令 ldconfig 更新目录。 我们输入以下命令编辑/etc/ld.so.conf 文件,如下图所示: 修改完文件保存退出,输入 ldconfig 更新目录。运行测试如下图所示:
|