一、库是什么
库是二进制格式的源代码(二进制加密)
二、库的使用
- 头文件
- 制作的库文件
三、静态库的制作和使用
- 命名规则
libxxx.a
- 制作步骤
- 准备源代码文件
- 将源代码文件生成 .o 文件
gcc -c *.c
- 将 .o 文件打包(archive)
ar rcs libxxx.a *.o
- 查看 lib 文件
nm libxxx.a
- 库的使用
gcc main.c -I./include -L ./lib -lmyCalc -o app
-L
: 库的路径-l
: 库的名称(去掉 lib 前缀和 .a 后缀)
四、动态库的制作和使用
- 命名规则
libxxx.so
- 制作步骤
- 准备源代码文件
- 将源代码文件生成 .o 文件
gcc -c -fpic *.c
或者gcc -c -fPIC *.c
- 将 .o 文件打包
gcc -shared -o libxxx.so *.o
- 库的使用
gcc main.c -I ./include -L ./lib -l mycalc -o app2
- 动态库无法加载(4 种方式)
- 使用临时环境变量设置:
export LD_LIBRARY_PATH=./lib:$LD_LIBRARY_PATH
- 修改用户级别的配置文件:打开
~/.bashrc
文件,将export LD_LIBRARY_PATH=~/lib
(注:等号两边不要有空格)添加到文件最后,重启 bash 终端或source ~/.bashrc
- 修改系统级别的配置文件:
/etc/profile
,重复上面的步骤 - 更新
/etc/ld_so_cache
文件列表- 将库的绝对路径(注:必需是绝对路径,不能使用类似
~
代替)添加到配置文件中etc/ld.so.conf
- 执行
sudo ldconfig -v
命令
- 将库的绝对路径(注:必需是绝对路径,不能使用类似
- 拓展,使用函数调用:
dlopen、dlclose、dlsym
- Linux动态库路径查找顺序:
- 使用临时环境变量设置:
五、其它命令
file app2
ldd app2