免费注册 查看新帖 |

Chinaunix

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

[系统管理] 关于/lib/ 和 /lib64 和 /lib32 [复制链接]

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-11-30 13:37 |只看该作者 |倒序浏览
最近遇到一个问题,某软件在 RedHat 上是可以安装的,到 ubuntu 里面变的不能安装了。
然后看了一下,RedHat 中 /lib 里面是 32位的库,/lib64 里面是 64位的库。
Ubuntu 中 /lib 里面是 64 位的库,/lib32 里面是 32位的库。
这样的问题要怎么解决呢?有什么资料可以学习一下吗?谢谢

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
2 [报告]
发表于 2015-11-30 21:42 |只看该作者
回复 1# amarant


不同发行版对 multiple library 的支持方式不同,没有什么好的办法,只能是修改软件(的安装脚本)。

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
3 [报告]
发表于 2015-12-02 10:44 |只看该作者
回复 2# MMMIX


    谢谢回答。

修改了 LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib32:/usr/lib32还是没有用。编译的时候还是无法链接..

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
4 [报告]
发表于 2015-12-02 12:52 |只看该作者
回复 3# amarant


    LD_LIBRARY_PATH 是给运行时的 loader 用的,不是给连接时的 linker 用的。

给 linker 添加额外的库搜索路径用 -L/path/to/lib

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
5 [报告]
发表于 2015-12-02 13:23 |只看该作者
回复 4# MMMIX


    貌似这个对链接也是有效的。
http://xahlee.info/UnixResource_dir/_/ldpath.html
  1. Why was it invented?

  2. There were a couple good reasons why it was invented:

  3.     To test out new library routines against an already compiled binary (for either backward compatibility or for new feature testing).
  4.     To have a short term way out in case you wanted to move a set of shared libraries to another location.

  5. As an often unwanted side effect, LD_LIBRARY_PATH will also be searched at link (ld) stage after directories specified with -L (also if no -L flag is given).
复制代码

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2015-12-02 14:04 |只看该作者
回复 5# amarant


    GNU ld 是不会去 LD_LIBRARY_PATH 中查找 -l 指定的库的,其他 ld 就不清楚了。

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
7 [报告]
发表于 2015-12-02 14:49 |只看该作者
本帖最后由 amarant 于 2015-12-02 14:54 编辑

回复 6# MMMIX


    涨知识了。。再请教一个问题,一个elf文件在执行的时候,它是否会去/lib/ /lib64 /lib32 里面都去找找看是否有适配的相应的库。
举个例子,例如一个 elf32 的文件在执行的时候,是否会去 /lib64 里面找有没有32位的所需要的库呢?

之所以问这个问题是因为,我发现有些32位的软件只要安装上相关的i386版本库就可以执行,但有些软件死活就要往/lib32里面去找。
我知道linux中提供一个uselib的函数,但我没用过这个函数。我不知道是否因为某些软件指定了绝对路径,例如uselib("/usr/lib/libtermcap.so.2");才导致了这样的问题。

定义这些规则的文档是什么,我学习一下

BTW,这个问题我已经用猥琐的方法解决了
直接在 lib 中创立所需要的库的符号链接,指向 lib32
例如  sudo ln -sf /lib32/libtinfo.so.5 libtermcap.so.2

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
8 [报告]
发表于 2015-12-02 20:22 |只看该作者
本帖最后由 MMMIX 于 2015-12-02 20:22 编辑
amarant 发表于 2015-12-02 14:49
一个elf文件在执行的时候,它是否会去/lib/ /lib64 /lib32 里面都去找找看是否有适配的相应的库。
举个例子,例如一个 elf32 的文件在执行的时候,是否会去 /lib64 里面找有没有32位的所需要的库呢?

取决于系统的设置,看看 ld.so(8) 和 ldconfig(8)


我不知道是否因为某些软件指定了绝对路径,例如uselib("/usr/lib/libtermcap.so.2");才导致了这样的问题。


有可能,但未必是用的 uselib。

论坛徽章:
84
每日论坛发贴之星
日期:2015-12-29 06:20:00每日论坛发贴之星
日期:2016-01-16 06:20:00每周论坛发贴之星
日期:2016-01-17 22:22:00程序设计版块每日发帖之星
日期:2016-01-20 06:20:00每日论坛发贴之星
日期:2016-01-20 06:20:00程序设计版块每日发帖之星
日期:2016-01-21 06:20:00每日论坛发贴之星
日期:2016-01-21 06:20:00程序设计版块每日发帖之星
日期:2016-01-23 06:20:00程序设计版块每日发帖之星
日期:2016-01-31 06:20:00数据库技术版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-16 06:20:00程序设计版块每日发帖之星
日期:2016-01-14 06:20:00
9 [报告]
发表于 2015-12-04 17:14 |只看该作者
ldd 看看结果:

$ ldd /usr/bin/ls
        linux-vdso.so.1 (0x00007ffc9a0ef000)
        libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f8d32e9b000)
        libcap.so.2 => /lib64/libcap.so.2 (0x00007f8d32c96000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f8d328d4000)
        libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f8d32664000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f8d32460000)
        /lib64/ld-linux-x86-64.so.2 (0x00005628c6c43000)
        libattr.so.1 => /lib64/libattr.so.1 (0x00007f8d32259000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f8d3203c000)

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
10 [报告]
发表于 2015-12-04 18:19 |只看该作者
回复 9# yjh777


    是编译的时候链接问题。跟ldd没什么关系
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP