动态库的命名规则:lib+库的名字+.so
libmyname.so
动态库的创建和使用【共享库】
步骤一:生成对应的.o文件【.c --> .o】
gcc -fPIC -c *.c -I ../include 生成与位置无关的.o文件【-fPIC 与位置无关】
步骤二:将生成的.o文件打包成动态库.so文件
gcc -shared -o libMyCalDll.so *.o 生成动态库libMyCalDll.so
步骤三:发布动态库生成可执行文件
方式一:
gcc main.c lib/libMyCalDll.so -o mysumdll.out -Iinclude
方式二:
gcc main.c -Iinclude -L lib -l MyCalDll -o mysum
ldd mysum.out 查看可执行文件在执行过程中所依赖的所有的共享库
结果:linux-vdso.so.1 => (0x00007ffd36291000)
lib/libMyCalDll.so (0x00007f1a1e81a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f1a1e44c000)【标准C库】
/lib64/ld-linux-x86-64.so.2 (0x00007f1a1ea1c000)【动态链接器】
mysum.out可执行文件使用【动态链接器】调用它所依赖的动态库
解决动态链接库不能被加载到的问题:
方法一:临时测试
在环境变量 LD_LIBRARY_PATH 中添加要加载的动态链接库的路径,
之后动态链接器调用可执行文件依赖的动态库时会先在 LD_LIBRARY_PATH中查找
之后再从默认的环境变量 PATH 里面按顺序查找
注意:该方法只能在测试中临时使用,关闭终端设置失效
export LD_LIBRARY_PATH=./lib【export 导入到系统的环境变量中】
方法二:永久设置
在当前用户家目录下的隐藏文件.bashrc中添加
export LD_LIBRARY_PATH=/root/testdandan/Calculator/lib【动态库的绝对路径】
.bashrc生效需要重启终端
方法三:将该文件放到系统目录下的lib下【不推荐使用】
方法四:永久设置
1).需要找到动态链接器的配置文件 /etc/ld.so.conf
2).将动态库的绝对路径写到配置文件中 /root/testdandan/Calculator/lib
3).更新配置
ldconfig -v