免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1588 | 回复: 1
打印 上一主题 下一主题

[C] linux下动态链接库的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-09 16:34 |只看该作者 |倒序浏览
看了网上一些资料,有人说动态链接库分“隐式调用”和“显示调用”。
“隐式调用”的动态链接库跟静态链接库使用类似,就是包含头文件,编译时指定链接路径。
我的疑问是(都是关于静态链接):
linux如何处理“隐式调用”的动态链接库的链接和加载?
链接和加载分别发生在什么时候?
这里的链接和加载是不是和静态库的加载和链接一样啊?
有没有用到动态链接和动态加载?
动态链接和动态加载明确的含义和区别以及联系?
我自己的思考是:
既然是动态链接库(共享库),那么在链接的时候,一定是仅有一个副本,“隐式调用”在这里与静态库一定是不同的;
其次,链接和加载的时机可能与静态链接的不同,但是我找不出证据,从侧面考虑,静态链接发生在程序编译成可执行文件后,
此时符号解析已经完成,而加载程序不需要进一步的进行地址分配和绑定工作;动态链接可能在加载程序到内存时,此时处理一些事情。
我对动态链接,和动态加载的却分很模糊,希望知道的人帮我解释下,
至于“显示调用”,我的理解是利用一些系统接口函数,类似于打开一个文件,获得函数的调用以及别的功能
在指定路径打开动态链接库时,用户程序指定动态链接库的加载,而链接过程也可以由用户指定发生在什么时候。
这里的符号解析和重定位应该是有系统带的链接和加载程序完成,linux的动态链接库加载和链接由用户程序解释,
内核将控制权交给解释器程序。


以上肯定有很多不对的地方,欢迎大家帮我指正

论坛徽章:
1
白羊座
日期:2013-09-18 22:02:26
2 [报告]
发表于 2013-07-25 21:25 |只看该作者
静态库直接编译到elf文件中,so是在elf头中会记录程序运行需要那些库。


具体可以参见《程序员的自我修养》或man dlopen
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP