开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第28天,点击查看活动详情
一.
1.动态库的制作
(1)在终端里添加环境变量(缺点是关闭终端后环境变量便消失)
gcc得到.o文件,得到与位置无关的代码
gcc -c -fpic add.c div.c mult.c sub.c
在终端添加环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/yj/Linux/lession02/library/lib
gcc得到动态库
gcc main.c -o main -I include/ -L lib/ -l calc
(2)用户级别添加环境变量(永久保存)
回到初始目录下
cd
vim .bashrc并且在最后一行添加
2.工作原理
◼ 静态库:GCC 进行链接时,会把静态库中代码打包到可执行程序中
◼ 动态库:GCC 进行链接时,动态库的代码不会被打包到可执行程序中
◼ 程序启动之后,动态库会被动态加载到内存中,通过 ldd (list dynamic dependencies)命令检查动态库依赖关系
◼ 如何定位共享库文件呢? 当系统加载可执行代码时候,能够知道其所依赖的库的名字,但是还需要知道绝对路径。
此时就需要系统的动态载入器来获取该绝对路径。对于elf格式的可执行程序,是 由ld-linux.so来完成的,
它先后搜索elf文件的 DT_RPATH段 ——> 环境变量 LD_LIBRARY_PATH ——> /etc/ld.so.cache文件列表 ——> /lib/,/usr/lib 目录
找到库文件后将其载入内存
二.
1.程序编译成可执行程序的过程
2.静态库制作过程
3.动态库制作过程
4.静态库的优缺点
5.动态库的优缺点