阅 读 文 章

solaris中有类似windows的DLL有关的函数吗?

[来源:网上转载 () | 作者:网友() | 时间:2007-07-07 | 浏览:人次 ]

发信人: cpu (奔腾的心), 信区: Solaris 
标 题: Re: solaris中有类似windows的DLL有关的函数
发信站: 华南网木棉站 (Fri Aug 7 19:36:46 1998), 转信 

【 在 irene (yoyo) 的大作中提到: 】 
: 如题 
呵呵当然有,window那套动东东很多机制都是抄unix的 
比如system(32)\*.dll是就是仿照unix的/usr/lib/*.so 
unix的/usr/lib/*.so就是unix的动态库(dynamic library) 
给程序动态链接用的,反之/usr/lib/*.a是静态库,程序编译 
链接时就将相关函数链入目标文件。 

实际上泥cc -o yyy yyy.o -lXXX那个XXX就是告诉cc找/usr/lib/libXXX.so.. 
yyy.o声明调用了libXXX.so中的函数,链接成功的目标文件yyy在运行时将动态 
调用libXXX.so的函数,至于cc -o yyy yyy.o libxxx.a那就不同了呵呵 
cc对-l参数的缺省链接方式是动态链接,即只链接符号,不链入函数实体。 
对链接方式可man ld。 

言归正传,既然有动态库,就肯定有与之相关的函数,window有LoadLibrary, 
偶solaris有dlopen,就是dynamic library open,window能让泥做 
土版DLL,偶solaris早就能让泥自己生产.so了呵呵,下面具体说明怎样调用 
动态库libXXX里的函数而又不需要在cc中指定-lXXX。 

首先是dlopen,格式: 

#include 
void * dlopen(const char *pathname, int mode); 
返回一个void *类型的handle,否则返回NULL。 

pathname就是泥所要打开的动态库,如果这个库声明链接了其它库,即对其它 
库有依赖关系,那么所有相关有依赖关系的库都会被打开,这些打开的库称之 
为组(group)。 

mode是打开方式: 

RTLD_LAZY:打开动态库后只重定位库中数据地址引用而不重定位而函数引用, 
函数引用在该函数要被激活时才定位,的确LAZY呵呵,但省开销;) 
RTLD_NOW: 与上者相比,动态库一被打开就重定位所有函数的引用。 

RTLD_GLOBAL:打开动态库里的全局符号可以被其它所有库重定位。 
RTLD_LOCAL: 打开动态库里的全局符号只能被同组库重引用。 
RTLD_GROUP: 只有相关组的符号才允许重定位?? 
RTLD_PARENT:发dlopen调用的对象中的符号对被dlopen对象可见。 
RTLD_WORLD: 。。。呵呵太晦涩了我翻译的我都看不明白;( 

总之,一个RTLD_LAZY已经够用了呵呵;) 

然后是得到重定位的数据或函数引用: 
#include 
void *dlsym(void *handle, const char *name) 
意义明显,handle即dlopen的返回值,name即泥要引用的在动态库变量或函 
数名称。成功返回重定位后的符号地址,失败返回NULL。 

最后是关闭动态库:int dlclose(void *handle), 
一看就明白,懒得解释了;) 

下面给一个例子增加感性认识,该例子调用动态库client.so中的函数 
int client_request(char *),该函数返回0或-1并根据不同错误设置 
字符串err_info(也定义在client.so中): 

# include 
# include 
# include 

# define TRUE 0 
# define FALSE -1 
论坛热门帖子: [lch203] 写得蛮好的linux学习笔记(10-21)
[黑马制造] 学习java的30个目标(10-19)
[笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19)
[udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18)
[沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18)
TAG标签: 有关 函数 类似 动态 引用 handle 打开 定位 dlopen 链接

最新评论 共有0位网友发表了评论

发表评论

评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名:(注册)
密码:
验证码:
匿名发表

网站地图友情连接交流论坛网站投稿广告服务联系我们留言本站长统计
Some rights reserved: www.chmhome.com, 鄂ICP备07010232号 E-mail:chinakafei@live.com,QQ:552766
中国咖啡技术网(Chmhome):国外编程技术书籍,中文编程手册,经典编程文章,交流技术,技术软件下载,计算机论文,毕业论文.