这篇文章主要介绍了Linux下如何调用dll& .so库,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。
{ 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下如何调用dll& .so库”这篇文章对大家有帮助,同时也希望大家多多支持亿速云,关注亿速云行业资讯频道,更多相关知识等着你来学习!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。