Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库,下面良许教程网为大家分享一下Linux下调用dll& .so库具体方法。
{ void *handle=dlopen("./libdemo4.so",RTLD_LAZY); void(*fun)(int)=dlsym(handle,"diamond"); fun(5); dlclose(handle);}
使用libdl.so库 动态库加载的原理
dlopen 打开一个动态库 dlsym 在打开动态库找一个函数 dlclose 关闭动态库 //dlerror 返回错误
注意了 动态库是可以执行,静态库不能执行 但动态库没有main,不能独立执行。 动态库不会连接成程序的一部分。 程序执行的时候,必须需要动态库文件。
ldd 察看程序需要调用的动态库 ldd 只能察看可执行文件. readelf -h 察看执行程序头. nm 察看库中的函数符号
3.动态库的编译 3.1.编译 -c -fpic(可选) 3.2.连接 -shared 4.使用动态库 gcc 代码 动态库文件名 gcc 代码 -l库名 -L动态库所在路径
标准命名规则: lib库名.so lib库名.a
-l 库名 -L 库所在路径
大深坑: 4.1.执行程序怎么加载动态库? 4.2.动态库没有作为执行程序的一部分,为什么连接需要指定动态库以及目录? 连接器需要确定函数在动态库的中的位置
动态库的加载: 1.找到动态库 2.加载动态库到内存 3.映射到用户的内存空间 系统对动态库查找规则: /lib /usr/lib 到环境变量LD_LIBRARY_PATH指定的路径中查找
三.静态库的编译 1.编译过程(*.a achieve) 1.1.编译成目标文件 -static 可选 gcc -c -static 代码文件.c
1.2.归档成静态库 ar工具 ar -r -t ar -r 静态库文件 被归档的文件
nm工具(察看函数符号表) nm 静态库或者动态库或者目标文件或者执行文件
1.3.使用静态库 gcc 代码 静态库
结晶步骤:
1.函数等代码封装的二进制已经编译的归档文件 2.ar归档方式 库的方式
3.编译好的程序运行的时候不依赖库。库作为程序的一部分编译连接。
4.文件集合(归档)
5.库命名规则 注意了: lib库名.a.主版本号.副版本号.批号 lib库名.a 库使用规则 -l 库名 -L 库所在目录
以上就是
为各位朋友分享的 相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多 等着你!