动态库制作与使用
命令规则Llinux libxxx.so win: libxxx.dll
1. 制作:gcc -c -fpic a.c b.c 位置无关的代码
2 . 得到动态库
` gcc -shared a.o b.o -o libcalc.so
示例:
1. `gcc -c -fpic add.c div.c mult.c sub.c `
2. `gcc -shared *.o -o libcalc.so`
3.使用
` gcc main.c -o main -I include/ -l calc -L lib/`
因为静态库会打包到可执行文件,但是动态库不会,所以运行的时候才会吧动态库加载到内存中。
使用ldd查看可执行文案依赖的动态库
动态库获取的顺序:
当系统加载可执行代码时候,能够知道其所依赖的库的名字,但是还需要知道绝对路 径。此时就需要系统的动态载入器来获取该绝对路径。对于elf格式的可执行程序,是 由ld-linux.so来完成的,它先后搜索elf文件的 DT_RPATH段 ——> 环境变量 LD_LIBRARY_PATH ——> /etc/ld.so.cache文件列表 ——> /lib/,/usr/lib 目录找到库文件后将其载入内存
第一中动态连接方式 LD_LIBRARY_PATH
查看` echo $LD_LIBRARY_PATH`
拼接环境变量:`export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/linux-webserver/lesson06/library/lib`
这种方式与终端有关,是临时的
永久性配置的方法。
用户级别的设置
`vim ~.bashrc`
添加` export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/linux-webserver/lesson06/library/lib`
激活 `. .bashrc ` .就是source 激活的意思
系统级别的配置:
`sudo vim /etc/profile` 后面一样
第二章方式: /etc/ld.so.cache
`sudo vim /etc/ld.so.conf`
`sudo ldconfig`
第三第四种,把库文件放到 /lib/ /user/liv目录,但是不推荐