1.制作出来的库,如何给用户使用?
头文件
制作出来的库
2.动态库的命名规则(三部分)
libXXX.so
其中:
lib
.so
XXX:自定义库的名字
3.制作动态库的步骤
1.准备原材料:源代码.c .cpp
2.将.c文件生成.o
[语法] gcc .c文件(原材料) -c -fpic(fPIC)
gcc *.c [-I ./include] [-c] [-fpic(fPIC)]
3.使用gcc -shared,将.o文件打包,生成libXXX.so
gcc [-shared *.o] [-o libXXX.so]
4.动态库的使用
1.生成可执行文件
gcc main.c -I ./include/ -L ./lib/ -lmycalc -o app
-L 指定静态库的路径
-lXXX XXX指定静态库的名字
2.执行..app,发现,程序报错,见下图:
-
为什么上面编译成的可执行程序,执行却[找不到链接库]呢?
对于elf格式的可执行程序,是由ld-linux.so*来完成的,它先后搜索elf文件的[DT_RPATH段——环境变量LD_LIBRARY_PATH——/etc/ld.so.chche文件列表——/lib,/usr/lib目录],找到库后将其载入内存。 -
如何让系统找到共享库?解决方案:
[1]拷贝自己制作的共享库到/lib或者/usr/lib目录下
[2]设置环境变量
(1)临时设置LD_LIBRARY_PATH:export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:库路径
(2)永久设置
用户级别:~/.bashrc
系统级别:/etc/profile
[3]更新/etc/ld.so.cache文件列表
(1)找到配置文件/etc/ld.so.conf,把动态库的绝对路径添加到配置文件中
(2)执行sudo ldconfig -v
[4]知识点扩展,使用函数调用的方式
dlopen,dlclose,dlsym