28_库的制作与使用
库的制作与使用
介绍
库是一种可执行的二进制文件, 是编译好的代码。 使用库可以提高开发效率。 在 Linux 下有静态库和动态库。 因此编译出来的体积就比较大。
静态库在程序编译的时候会被链接到目标代码里面。 所以程序在运行的时候不再需要静态库了。 因此编译出来的体积就比较大。 以 lib 开头, 以.a 结尾
动态库(动态库也叫共享库) 在程序编译的时候不会被链接到目标代码里面, 而是在程序运行的时候被载入的。 所以程序在运行的时候需要动态库了。 因此编译出来的体积就比较小。 以 lib 开头, 以.so 结尾。
静态库的制作步骤:
1 编写或准备库的源代码
2 将源码.c 文件编译生成.o 文件
3 使用 ar 命令创建静态库
4 测试库文件
实验: 静态库的制作
新建 mylib.c 文件, 编辑内容如下所示:
#include<stdio.h>
void mylib(void);
void mylib(void)
{
printf("This is mylib\n");
}
cr是创建和覆盖的意思
lib开头.a结尾
libmylib.a: 库文件名
mylib: 库名
使用这个静态库
test.c
#include<stdio.h>
void mylib();
int main(int argc, char const *argv[])
{
mylib();
return 0;
}
-l+去掉lib前缀和.a后缀的库名
-L+该库文件名所在的路径
动态库制作步骤:
1 编写或准备库的源代码
2 将源码.c 文件编译生成.o 文件
3 使用 gcc 命令创建动态库
4 测试库文件
新建 mylib.c 文件, 编辑内容如下所示:
#include<stdio.h>
void mylib(void);
void mylib(void)
{
printf("This is mylib\n");
}
-fpic: 生成位置无关的代码(产生的代码中,没有绝对地址,全部使用相对地址)
-shared: 生成动态库
test.c
#include <stdio.h>
void mylib(void);
int main(void)
{
mylib();
return 0;
}
在动态库使用是, 系统会默认去/lib, /usr/lib 目录下去查找动态函数库, 如果我们使用的库不在里面,
就会提示错误。 解决这个问题有三种方法。
解决方法:
第一种方法:
将生成的动态库拷贝到/lib 或者/usr/lib 里面去, 因为系统会默认去这俩个路径下寻找。
第二种方法:
把我们的动态库所在的路径加到环境变量里面去, 比如我们动态库所在的路径为/home/test, 我们就可以这样添加, 但是这种方法只在当前设置的窗口有效。
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/samba/linux/13
我们加入环境后, 运行 a.out,如下图所示:
只对当前命令窗口有效
第三种方法:
修改 ubuntu 下的配置文件/etc/ld.so.conf, 我们在这个配置文件里面加入动态库所在的位置, 然后使用命令 ldconfig 更新目录。
我们输入以下命令编辑/etc/ld.so.conf 文件, 如下图所示:
修改完文件保存退出, 输入 ldconfig 更新目录。 运行测试如下图所示: