一、静态库制作
1.gcc获取.o文件
gcc -c xxx.c -o xxx.o//获取.o文件
2.使用ar工具(archive)将.o文件打包
在Windows上,静态库文件扩展名为libxxx.lib;在Linux上,扩展名是libxxx.a。(只有xxx是可以自己更改的,其他的都是固定的)
ar rcs libxxx.lib xxx.o xxx.o//这是Windows,r是将文件插入备存文件中,c是建立备存文件,s是索引
ar rcs libxxx.a xxx.o xxx.o //同上,这是Linux
3.静态库的使用
gcc main.c -o main -I 头文件路径 -l 所使用库文件名称 -L 所使用的库文件路径
这里所使用的库文件名称是不包括前缀
lib
和后缀.a(Linux系统上)或.lib(windows系统上)
二、动态库制作
1.gcc获取.o文件,得到和位置无关的代码
得到与位置无关的代码的好处:可以在任何地址空间加载并执行,而不需要固定的加载地址(可重用性)。可以在多个进程之间共享(可共享性)。可以在不同的系统和架构上加载和执行(可兼容性)。
gcc -c -fpic/-fPIC xxx.c xxx.c
2.gcc得到动态库
gcc -shared xxx.o xxx.o -o libxxx.dll//Windows
gcc -shared xxx.o xxx.o -o libxxx.so//Linux
程序启动,需要把动态库加载到内存中,Linux系统可以通过ldd指令还检查动态库依赖关系。
3.动态库的使用
动态库和静态库的使用一样,同时这里需要注意的事项也和上面的静态库一样。
gcc main.c -o main -I 头文件路径 -l 所使用库文件名称 -L 所使用的库文件路径
三、Linux系统上解决动态加入失败问题的方法
检查内存动态库指令 ecLD_LIBRARY_PATH
方法一: 直接使用命令加入内存
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:再加上动态库地址
但是这个指令在系统重启后内存中就没有了,需要再手动加入内存。
方法二:更改.bashrc文件
vim .bashrc//打开bashrc在文件最后添加方法一的指令,最后使用下面指令更新库
source ~/.bashrc
. ~/.bashrc
方法三:修改/etc/ld.so.conf文件
sudo vim /etc/ld.so.conf
把动态库地址写入这个文档