免费注册 查看新帖 |

Chinaunix

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

[C] gcc使用动态库时直接加到输入文件里和通过-llibrary加入的有什么区别? [复制链接]

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-08 14:13 |只看该作者 |倒序浏览
本帖最后由 yecheng_110 于 2013-10-08 15:41 编辑

通过ldd查看一个是直接列出来这个库的绝对路径,一个是有一个=>指出找到的位置。
gcc -o test test.c /DIR/libmd5.so
gcc -o test test.c -L/DIR -lmd5

论坛徽章:
7
摩羯座
日期:2013-12-05 10:42:57辰龙
日期:2013-12-27 13:40:49亥猪
日期:2014-01-15 09:10:37天秤座
日期:2014-01-20 11:22:20辰龙
日期:2014-01-26 17:02:25午马
日期:2014-01-27 14:22:34水瓶座
日期:2014-02-19 09:36:40
2 [报告]
发表于 2013-10-08 15:51 |只看该作者
一个是相对路径, 一个是绝对路径。用相对路径的时候要指定路径,仅此而已! -lmd5的意思就是去/DIR里查找libmd5.so

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
3 [报告]
发表于 2013-10-09 07:50 来自手机 |只看该作者
本帖最后由 yecheng_110 于 2013-10-09 07:51 编辑

gcc可以识别命令行参数中的文件是objectfile,动态库还是静态库哈?这个和-rpath指定的绝对路径有什么区别?

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
4 [报告]
发表于 2013-10-09 12:08 |只看该作者
回复 3# yecheng_110


    rpath指定的是运行时搜索路径。库的搜索路径在其实分为两个环境,一个链接生成程序时用到的路径,一个是程序运行时需要的路径。ELF程序在生成时如果有用到动态库那么会在program header中生成.interp section,这个section就是用于指定interpreter的。interpreter的功能很多,而分析动态库符号及其依赖进而加载和重定位相应对象是其功能最重要一环。interpreter也叫作Runtime Linker。在链接生成程序时会链接器会根据“默认搜索路径”和指定的参数路径来定位库文件。而当程序运行时interpreter会根据“默认搜索路径”和rpath指定的路径来定位库文件。“默认搜索路径”在32位系统下是/lib,/usr/lib,在64位下是/lib64,/usr/lib64,可以通过修改/etc/ld.conf来指定额外的目录到“默认搜索路径”中,可见“默认搜索路径”既在链接生成阶段起作用也在运行时起作用。LD_LIBRARY_PATH也可以指定搜索路径,它在链接生成时和运行时都起作用。可以通过在LD_LIBRARY_PATH指定路径覆盖“默认搜索路径”中的库文件。因为程序在启动时会先使用LD_LIBRARY_PATH。

论坛徽章:
1
双子座
日期:2015-01-04 14:25:06
5 [报告]
发表于 2013-10-09 18:50 |只看该作者
myworkstation 发表于 2013-10-09 12:08
回复 3# yecheng_110

多谢,再请教一下和直接写文件的不同是什么?

论坛徽章:
17
处女座
日期:2013-08-27 09:59:352015亚冠之柏太阳神
日期:2015-07-30 10:16:402015亚冠之萨济拖拉机
日期:2015-07-29 18:58:182015年亚洲杯之巴勒斯坦
日期:2015-03-06 17:38:17摩羯座
日期:2014-12-11 21:31:34戌狗
日期:2014-07-20 20:57:32子鼠
日期:2014-05-15 16:25:21亥猪
日期:2014-02-11 17:32:05丑牛
日期:2014-01-20 15:45:51丑牛
日期:2013-10-22 11:12:56双子座
日期:2013-10-18 16:28:17白羊座
日期:2013-10-18 10:50:45
6 [报告]
发表于 2013-10-10 10:28 |只看该作者
回复 5# yecheng_110


    直接写绝对路径的话在链接生成程序时使用指定的文件,在运行程序时也会从相应的位置加载文件,如果你的程序发布的别的机器上而库文件没有在相应的目录下的话是无法运行程序的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP