- 什么是函数库?
- 存放粮食的仓库称作粮库。存放函数的仓库称作函数库。
- 系统提供了标准库还有一些其他的库文件。
- 用户也可以自定义函数库
- 根据链接方式的不同,将函数库分为动态库(共享库)和静态库两种
- 库函数的命名规则
- 动态库命名规则 lib库名.so
- 静态库的命名规则 lib库名.a
一、静态库的制作和使用
- 将所有要加入库中的源文件编译为目标文件
- 将第一步生成的所有目标文件打包为静态库文件
- 使用静态库文件链接生成可执行文件
二、动态库的制作和使用
- 将所有要加入库的源文件编译为目标文件。与位置无关的目标文件
- 将第一步生成的目标文件打包到动态库文件中
- 使用动态链接库生成可执行文件
报错及解决办法:
在我们得到可执行文件a.out时会出现了此报错:a.out: error while loading shared libraries: libp_math.so: cannot open shared ob iect file: No such file or directory
因为生成的是动态库所以我们在执行前要加载动态库
查看可执行文件对动态库的依赖?(ldd指令)
首先我们可以用ldd指令去查看一下a.out所依赖的库 指令ldd a.out
看到libt_math.so并没有加载我们的动态链接器找不到我们的库文件
有两种解决办法
一、LD_LIBRARY_PATH(是Linux环境变量名,该环境变量主要用于指定查找共享库(动态链接库)时除了默认路径之外的其他路径)
在其默认路径下再将我们动态链接库的路径加进去即可。 文件可执行
二、可以将我们的动态链接库放到连接器默认的路径下
- 根下的lib或者根下usr下的lib /lib | /usr/lib
链接器默认的路径下可以搜到我们的动态链接库,再次通过ldd a.out 查看发现已经再lib下找到了我们的动态链接库
注:当我们把生成的链接库直接放到lib下,那我们的最后一步gcc main.c -L. -lt_math 是不是就可以改为gcc main.c -lt_math