像libiconv.so.2这样.so后面有数字的动态库如何链接,如何理解?(高手来)

武汉元码科技 2014-01-14 05:27:11
为什么有些动态库后面有数字呢?如:libiconv.so.2 有人说是和升级新版本有关,创建一个软连接。
我的makefile里要链接iconv这个动态库自然是添加 -liconv,那么运行时只会依赖libiconv.so而不是libiconv.so.2或者libiconv.so.1吧?
如果要依赖libiconv.so.2那么makefile如何填写呢?
这里对动态库的软链接和依赖,不太理解,多谢解惑.
...全文
4425 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
puwaxiang 2015-08-04
  • 打赏
  • 举报
回复
楼主你的问题解决了吗? 我也有相同的疑问。程序运行时机器上没有libiconv.so的软链接,但程序是怎么找到libiconv.so.2的
非凡glj 2014-01-16
  • 打赏
  • 举报
回复 6
libiconv.so才是软连接,libiconv.so.1和libiconv.so.2就是你不同的版本,libiconv.so连接到哪个就是用的哪个版本,你自己写的程序用-liconv其实是找的libiconv.so这个软连接 相当于libiconv.so软连接是个中间层,你写的程序只关心这个,而具体iconv的版本由libiconv.so关心 你可以在自己的机器上装iconv的不同版本,通过更改libiconv.so连接的指向来实现版本的切换
武汉元码科技 2014-01-16
  • 打赏
  • 举报
回复
引用 1 楼 zgglj 的回复:
版本有关,比如你上面说的libiconv.so.2,一般会建立一个libiconv.so的软连接,用-liconv也是找的libiconv.so,这样的好处是我可以有多个版本的iconv库,比如还有一个libiconv.so.1,可以同时存在,但编译和执行的时候使用的是libiconv.so软连接指向的那个!这样makefile也不需要根据库版本进行变更
哦,不好意思啊,没有及时结贴是因为还有些疑问,就拿libiconv.so.2来说吧,linux上默认是没有这个的,要安装iconv库才行,但是我用ll -l 查看了libiconv.so.2,发现它不是一个软链接,而且硬链接数为1 -rw-r--r-- 1 root root 1167740 01-14 13:17 /opt/ivhs/qianduan/FIU/lib/libiconv.so.2, 但是进程的makefile中对libiconv库的依赖是 -liconv,没有2,所以感觉迷茫。 之前都在VC区发帖子的,linux才露脸,结帖率绝对保证,感谢你的回复
武汉元码科技 2014-01-15
  • 打赏
  • 举报
回复
顶起来,求帮助。。。。
非凡glj 2014-01-15
  • 打赏
  • 举报
回复
楼主的分真不好拿,你看我上面哪里没给你说清楚?
非凡glj 2014-01-14
  • 打赏
  • 举报
回复
如果没有libiconv.so你可以自己做个软连接到/usr/lib,之后调用ldconfig更新配置 libc.so.6是c库,程序肯定会用,gcc默认会连接
武汉元码科技 2014-01-14
  • 打赏
  • 举报
回复
引用 6 楼 zgglj 的回复:
你用的时候就直接-liconv这样就行了,如果版本变更,就把libiconv.so软连接连到新版本的库就行了
哦,多谢。 但是我在整个linux上都找不到libiconv.so,只找到了libiconv.so.2,那说明libiconv.so.2是被直接使用的,有点疑问? 另外我使用命令 ldd /usr/bin/iconv 显示的如下: linux-vdso.so.1 => (0x00007fffb85e2000) libc.so.6 => /lib64/libc.so.6 (0x0000003df9600000) /lib64/ld-linux-x86-64.so.2 (0x0000003df8e00000) 那这里libc.so.6是怎么一来上去的呢?在makefile中如何写? 多谢了!
非凡glj 2014-01-14
  • 打赏
  • 举报
回复
你用的时候就直接-liconv这样就行了,如果版本变更,就把libiconv.so软连接连到新版本的库就行了
非凡glj 2014-01-14
  • 打赏
  • 举报
回复
引用 2 楼 xiaoxiaoyu85 的回复:
[quote=引用 1 楼 zgglj 的回复:] 版本有关,比如你上面说的libiconv.so.2,一般会建立一个libiconv.so的软连接,用-liconv也是找的libiconv.so,这样的好处是我可以有多个版本的iconv库,比如还有一个libiconv.so.1,可以同时存在,但编译和执行的时候使用的是libiconv.so软连接指向的那个!这样makefile也不需要根据库版本进行变更
o,多谢了,那libiconv.so到底指向libiconv.so.1还是libiconv.so.2是安装包或者升级包去指定的吧?同时应该只能指定一个吧?(同一目录下只有一个同名链接文件)[/quote] 是的,你也可以手工管理,其它链接该库的程序最好就不要涉及库版本了
武汉元码科技 2014-01-14
  • 打赏
  • 举报
回复
引用 3 楼 max_min_ 的回复:
[quote=引用 2 楼 xiaoxiaoyu85 的回复:] [quote=引用 1 楼 zgglj 的回复:] 版本有关,比如你上面说的libiconv.so.2,一般会建立一个libiconv.so的软连接,用-liconv也是找的libiconv.so,这样的好处是我可以有多个版本的iconv库,比如还有一个libiconv.so.1,可以同时存在,但编译和执行的时候使用的是libiconv.so软连接指向的那个!这样makefile也不需要根据库版本进行变更
o,多谢了,那libiconv.so到底指向libiconv.so.1还是libiconv.so.2是安装包或者升级包去指定的吧?同时应该只能指定一个吧?(同一目录下只有一个同名链接文件)[/quote] 最终还是指向libiconv.so的[/quote] 不太明白,求楼主赐教。是libiconv.so指向libconv.so2,还是反过来?
max_min_ 2014-01-14
  • 打赏
  • 举报
回复
引用 2 楼 xiaoxiaoyu85 的回复:
[quote=引用 1 楼 zgglj 的回复:] 版本有关,比如你上面说的libiconv.so.2,一般会建立一个libiconv.so的软连接,用-liconv也是找的libiconv.so,这样的好处是我可以有多个版本的iconv库,比如还有一个libiconv.so.1,可以同时存在,但编译和执行的时候使用的是libiconv.so软连接指向的那个!这样makefile也不需要根据库版本进行变更
o,多谢了,那libiconv.so到底指向libiconv.so.1还是libiconv.so.2是安装包或者升级包去指定的吧?同时应该只能指定一个吧?(同一目录下只有一个同名链接文件)[/quote] 最终还是指向libiconv.so的
武汉元码科技 2014-01-14
  • 打赏
  • 举报
回复
引用 1 楼 zgglj 的回复:
版本有关,比如你上面说的libiconv.so.2,一般会建立一个libiconv.so的软连接,用-liconv也是找的libiconv.so,这样的好处是我可以有多个版本的iconv库,比如还有一个libiconv.so.1,可以同时存在,但编译和执行的时候使用的是libiconv.so软连接指向的那个!这样makefile也不需要根据库版本进行变更
o,多谢了,那libiconv.so到底指向libiconv.so.1还是libiconv.so.2是安装包或者升级包去指定的吧?同时应该只能指定一个吧?(同一目录下只有一个同名链接文件)
非凡glj 2014-01-14
  • 打赏
  • 举报
回复
版本有关,比如你上面说的libiconv.so.2,一般会建立一个libiconv.so的软连接,用-liconv也是找的libiconv.so,这样的好处是我可以有多个版本的iconv库,比如还有一个libiconv.so.1,可以同时存在,但编译和执行的时候使用的是libiconv.so软连接指向的那个!这样makefile也不需要根据库版本进行变更

23,209

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧