QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1201|回复: 6

那里有关于gcc的动态链接库原理的资料?

[复制链接]
发表于 2003-5-22 16:30:52 | 显示全部楼层 |阅读模式
搞不懂那些动态链接库是怎么命名和使用的。
发表于 2003-5-26 13:02:58 | 显示全部楼层
这个资料到处都有的拉
简单来说,编译的时候提供-lxxx选项,找的是libxxx.so,运行(动态链接)的时候找的是libxxx.so.n, 如果用dlopen方式打开则提供准确的名字就可以了。
回复

使用道具 举报

发表于 2003-5-26 18:29:55 | 显示全部楼层
跟windows下的dll的调用方式差不多,分显式和隐式。而且我认为更容易,就是不很安全。
回复

使用道具 举报

 楼主| 发表于 2003-5-27 09:20:24 | 显示全部楼层
libxxx.so.n 中的这个 n 是怎么确定的呢?还有 .la 文件是做什么用的呢?
回复

使用道具 举报

发表于 2003-5-27 10:37:22 | 显示全部楼层
这个n(主版本号)当然是库的作者自己定的, 如libxxx.so.n.m和libxxx.so.n.l两个库的主版本号一样, 说明两个库可以兼容, 接口相同。 一旦主版本号改变了就基本上可以说两个库接口不同了, 以前使用此库开发的程序可能需要重新编写。
至于la文件, 可能是静态连接用的吧, 类似windows下的.lib文件, 好像。 (这一点要是说错了别怪我, 我只用过动态链接)
回复

使用道具 举报

 楼主| 发表于 2003-5-27 13:52:04 | 显示全部楼层
还是有问题 : 连接程序是怎么知道库版本号的呢?
回复

使用道具 举报

发表于 2003-5-27 15:42:37 | 显示全部楼层
赫赫,这个问题差点把我问住了。
是这样, 编译的时候要在连接选项里写入-lxxx,这个xxx是libxxx.so.n中的库名部分, 连接程序在编译时就会到动态库的目录中寻找libxxx.so文件, 一般情况下这个文件应该是一个连接, 链向实际的libxxx.so.n.m...。 运行时寻找的linxxx.so.n中的n我想应该也是在编译时确定的。 也就是说编译的时候libxxx.so连接的实际目标是libxxx.so.Y...这个Y是几运行的时候就会载入哪个动态库。
所以要是你想在编译的时候指定连接哪个版本的库, 将libxxx.so指向正确的库版本文件即可。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 19:24 , Processed in 0.036882 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表