Questions tagged «ld»

2
在64位系统上运行32位二进制文​​件时收到“找不到”消息
我目前在debian(wheezy / amd64)上遇到一个奇怪的问题。 我已经创建了一个chroot来安装服务器(抱歉,我无法提供更多详细信息)。我们称之为路径/chr_path/。为了使事情变得容易,我已经用debootstrap(也是wheezy / amd64)初始化了此chroot。 chroot内的所有文件似乎都可以正常工作,但是当我启动服务器的安装程序脚本时,我得到了:( zsh: Not found /some_path/perl由于某些原因,安装程序包含perl二进制文件) 自然,我检查了/some_path/位置并找到了“ perl”二进制文件。file在chroot环境中返回: /some_path/perl ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.2.5, not stripped 该文件存在,看起来不错,具有正确的权限。我可以使用file,ls,vim它但只要我努力去执行它- ./perl例如-我得到:zsh: Not found ./perl。 这种情况对我来说是可以理解的。此外: 我可以在chroot中执行其他基本二进制文件(/ bin / ls,...) 对于项目随附的其他二进制文件,我也有同样的问题 当我尝试从主根目录(/chr_path/some_path/perl)执行二进制文件时,它可以工作。 我尝试将其中一个二进制文件与我的文件副本放在一起ls。我检查了访问权限是否相同,但这并没有改变任何内容(一个正在工作,另一个则没有)

1
为什么Unix / Linux系统不遍历目录,直到找到所需的链接库版本?
我有一个名为“ alpha”的二进制可执行文件,它需要一个链接库(libz.so.1.2.7),该库位于 /home/username/myproduct/lib/libz.so.1.2.7 我通过执行以下命令在生成二进制可执行文件之前将其导出到终端实例。 export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH 现在,当我生成另一个需要相同库但版本不同的应用程序“ bravo”时,即(libz.so.1.2.8)(可在中使用) /lib/x86_64-linux-gnu/libz.so.1.2.8,系统抛出以下错误。 version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2) 如果我未设置LD_LIBRARY_PATH,则“ bravo”启动正常。我了解上述行为是因为LD_LIBRARY_PATH在/etc/ld.so.conf查找链接库时优先于在其中定义的目录路径,因此发生了上述错误。我只是很好奇一个为什么UNIX / LINUX的开发人员没有设计OS以便如果库的第一个实例是不同版本的情况下就根据层次结构在其他目录中搜索链接的库。 简而言之,UNIX / LINUX系统遍历一组目录,直到找到所需的库为止。但是,为什么在找到期望的版本而不是接受库的第一个实例而不考虑其版本之前,它不做同样的事情?

1
环境中缺少LD_LIBRARY_PATH变量是否正常?
我偶然发现在我的Debian Jessie上没有LD_LIBRARY_PATH变量(确切地说,printenv | grep LD没有显示与链接程序有关的任何内容,echo "$LD_LIBRARY_PATH"也没有显示任何内容)。 x终端仿真器(由于setgid可能会清除它)以及基本终端(Ctrl+Alt+F1)就是这种情况。 我知道这LD_LIBRARY_PATH 可能被认为是很糟糕的,所以Debian可能会以某种方式阻止它,但是另一方面/etc/ld.so.conf.d/,其中有些文件包含要添加到的目录LD_LIBRARY_PATH。我所知道的rc文件都没有一个与之LD_LIBRARY_PATH混淆。 为什么我看不到LD_LIBRARY_PATH变量?

3
找出库是否在路径中
假设我要测试某个程序是否安装了库并且可以使用它。我可以使用ldconfig -p | grep mylib它来确定它是否已安装在系统上。但是如果仅通过设置知道该库LD_LIBRARY_PATH怎么办? 在这种情况下,程序可能能够找到该库,但ldconfig找不到。如何检查库是否在组合链接器路径中? 我要补充一点是,我正在寻找一个即使我手头上没有真正的程序(例如,该程序尚未编译)也可以使用的解决方案,我只想知道某个库存在于ld“的路径。


1
取消ld.conf.so.d库路径解析的优先级
从一个单独的问题以及有关该主题的其他文章看来ld.so.conf.d,在通过/lib或提供的任何库之前,总是会解决定义的其他库路径(即,在名称冲突的情况下,例如覆盖系统库时)/usr/lib。 是否有可能通过ld.so.conf.d某种机制创建一个系统范围的路径,在该路径下可以以最低/最新的分辨率级别来解析库?例如,我希望库/ParanoidAndroid/可以被解析,但是我希望该路径成为搜索它们的最后一个位置(即,优先于存储在中的库中/lib和/usr/lib之上的库/ParanoidAndroid/),因此现在的查找顺序为: LD_LIBRARY_PATH中的目录; 来自/etc/ld.so.conf的目录; / lib; / usr / lib。 / ParanoidAndroid;
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.