文档介绍:linux调用动态库so文件
2
————————————————————————————————作者:
————————————————————————————————日期:
个人搜集整理勿做商业用途
个人搜集整理勿做商业用途
个人搜集整理勿做商业用途
linux调用动态库so文件
分类: c++这些事2012-05-0214:55 4831人阅读 评论(0) 收藏 举报
linuxdlliostreamclass编译器winapi
关于动态调用动态库方式说明
一、 动态库概述
1、 动态库的概念
日常编程中,常有一些函数不须要进行编译或则可以在多个文件中使用(如数据库输入/输出操作或屏幕控制等标准任务函数)。可以事先对这种函数进行编译,之后将它们放置在一些特殊的目标代码文件中,这种目标代码文件就称为库。库文件中的函数可以通过联接程序与应用程序进行链接,这样就毋须在每次开发程序时都对这种通用的函数进行编译了。
动态库是一种在早已编译完毕的程序开始启动运行时,。
2、 动态库的命名
Linux下,(shareobject)结尾。(一般/lib和/usr/)
Windows下,.(一般C:windows)
3、 动态库与静态库之间的区别
静态库是指编译联接时,把库文件的代码全部加入到可执行文件中,所以生成的文件较大,但运行时,就不再须要库文件了。即,程序与静态库编译链接后,虽然删掉静态库文件,程序也可正常执行。
动态库刚好相反,在编译链接时,没有把库文件的代码加入到可执行文件中,所以生成的文件较小android linux,但运行时,,程序只在执行启动时才加载动态库,倘若删掉动态库文件,程序将会由于难以读取动态库而形成异常。
二、 Linux下动态调用动态库
备注:以下linux实例说明都是在RedHat+gcc版本20080704(RedHat-46)上实现。
3
个人搜集整理勿做商业用途
个人搜集整理勿做商业用途
个人搜集整理勿做商业用途
1、 。so动态库的生成
可使用gcc或则g++编译器生成动态库文件(此处以g++编译器为例)
g++-shared—fPIC-oXXX。soXXX。o
2、 。so动态库的动态调用插口函数说明
动态库的调用关系可以在须要调用动态库的程序编译时,通过g++的—L和-:程序test启动时须要加载目录/root/src/,编译命令可照如下编撰执行:
g++-g—otesttest。cpp–L/root/src/lib–ltest_so1
(此处,我们重点讲解动态库的动态调用的方式,关于静态的通过g++编译命令调用的方法不作详尽讲解,具体相关内容可上网查询)
Linux下,提供专门的一组API用于完成打开动态库如何安装LINUX,查找符号,处理出错,关掉动态库等功能。
下边对这种插口函数逐一介绍(调用那些插口时linux 动态库 版本信息,需引用头文件#include<>):
1) dlopen
函数原型:void*dlopen(constchar*libname,intflag);
功能描述:dlopen必须在dlerror,dlsym和dlclose之前调用,表示要将库装载到显存,,,返回NULL值;假如库早已被装载过,则dlopen会返回同样的句柄。
参数中的libname通常是库的全路径linux 动态库 版本信息,这样dlopen会直接装载该文件;倘若只是指定了库名称