标签: linker

在 64 位系统上运行 32 位二进制文​​件时收到“未找到”消息

我目前在 debian (wheezy/amd64) 上有一个奇怪的问题。

我创建了一个 chroot 来安装服务器(抱歉,我无法提供更多详细信息)。让我们称其为 path /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
Run Code Online (Sandbox Code Playgroud)

该文件存在,似乎没问题,具有正确的权限。我可以在它上面使用file, lsvim但是一旦我尝试执行它 -./perl例如 - 我得到 : zsh: Not found ./perl

这种情况对我来说是可以理解的。而且 :

  • 我可以在 chroot 中执行其他基本二进制文件 (/bin/ls,...) 而不会出错
  • 我对项目附带的其他二进制文件也有同样的问题
  • 当我尝试从主根 ( /chr_path/some_path/perl …

executable linker dynamic-linking ld

77
推荐指数
2
解决办法
6万
查看次数

Unix 中剥离和未剥离的可执行文件是什么?

man 文件

EXAMPLES
   $ file file.c file /dev/{wd0a,hda}
   file.c:   C program text
   file:     ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV),
             dynamically linked (uses shared libs), stripped
   /dev/wd0a: block special (0/0)
   /dev/hda: block special (3/0)
   $ file -s /dev/wd0{b,d}
   /dev/wd0b: data
   /dev/wd0d: x86 boot sector
   $ file -s /dev/hda{,1,2,3,4,5,6,7,8,9,10}
   /dev/hda:   x86 boot sector
   /dev/hda1:  Linux/i386 ext2 filesystem
   /dev/hda2:  x86 boot sector
   /dev/hda3:  x86 boot sector, extended partition table
   /dev/hda4:  Linux/i386 ext2 filesystem
   /dev/hda5:  Linux/i386 swap file
   /dev/hda6: …
Run Code Online (Sandbox Code Playgroud)

strip executable linker

47
推荐指数
1
解决办法
6万
查看次数

更改给定可执行文件的链接库 (CentOs 6)

我有一个像这样链接的可执行文件:

  $ ldd a.out
        libboost_system-mt.so.1.47.0 => /usr/lib64/libboost_system-mt.so.1.47.0 (0x00007f4881f56000)
        libssl.so.10 => /usr/lib64/libssl.so.10 (0x00007f4881cfb000)
        libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00007f4881965000)
        librt.so.1 => /lib64/librt.so.1 (0x00007f488175d000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4881540000)
        libstdc++.so.6 => /usr/lib64/libstdc++.so.6 (0x00007f4881239000)
.
.
Run Code Online (Sandbox Code Playgroud)

其中 libcrypto 和 libssl 库是 openssl 1.0.0-fips 库。我想尝试使用 1.0.1 库,因此我将它们构建在我的主目录中。有没有办法在a.out没有很多痛苦的情况下重新链接我的新 openssl 库?我想避免

  • 必须重新链接a.out(因为构建工具非常复杂)
  • 改变任何全局设置(因为其他开发人员在这台机器上工作)

有可能在这里做我希望的事情吗?

libraries linker

33
推荐指数
2
解决办法
7万
查看次数

什么是金接头?

有没有人gold以前使用过链接器?为了链接一个相当大的项目,我不得不使用它而不是 GNU ld,后者抛出了一些错误并且无法链接。

gold链接器如何能够链接ld失败的大型项目?某处是否存在某种记忆欺骗?

linux memory gcc linker dynamic-linking

26
推荐指数
2
解决办法
8664
查看次数

AT&T 的链接编辑器命令语言是什么?

的手册页ld参考了AT&T’s Link Editor Command Language,但是AT&T’s Link Editor Command Language除了指向所述手册页之外,Google 搜索并没有提供关于什么是或曾经是什么的令人满意的解释,而我预计前五个结果中会出现一个维基百科页面。

这里似乎缺少一段重要的计算历史。有没有人有关于这种语言的一些参考或历史文档?我们可以放在维基百科中为子孙后代保存的东西吗?

programming system-v linker

18
推荐指数
1
解决办法
1164
查看次数

创建静态二进制文件

我安装了一个应用程序 [例如 fdisk]。但它需要库来执行。我正在寻找实用程序/工具,它将帮助我从安装的二进制文件中创建一个静态二进制文件。这样我就可以在任何地方使用它。

我找到的唯一可靠的工具ErmineLight来自 这里,但这是共享软件。

是否有任何开源软件可用于相同的?

EDIT fdisk 只是一个例子。我大部分时间都在 LFS 上工作,所以如果我必须使用任何实用程序,我需要按照以下步骤操作

  1. 下载源码
  2. 配置
  3. 制作
  4. 做测试
  5. 进行安装,

因此,为了节省时间,我正在寻找一种解决方案,在该解决方案中,我将从 debian、fedora 或其他发行版制作静态二进制文件,在 LFS 上试用,如果它工作正常或按照我的要求,我会使用源代码进行编译。

executable linker static-linking

16
推荐指数
1
解决办法
1万
查看次数

ldd 找不到路径,如何添加

我知道这个问题不是很新,但似乎我无法解决我自己的问题。

ldd 生成以下输出

u123@PC-Ubuntu:~$ ldd /home/u123/Programme/TestPr/Debug/TestPr
    linux-vdso.so.1 =>  (0x00007ffcb6d99000)
    libcsfml-window.so.2.2 => not found
    libcsfml-graphics.so.2.2 => not found
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fcebb2ed000)
    /lib64/ld-linux-x86-64.so.2 (0x0000560c48984000)
Run Code Online (Sandbox Code Playgroud)

哪个是告诉ld正确路径的正确方法?

linux debugging path linker ld

14
推荐指数
2
解决办法
7万
查看次数

“ld”和“ld.so”之间的区别?

虽然两者都被称为“链接器”并用于链接二进制文件,但我真的无法弄清楚它们之间的区别。谁能告诉我他们的区别?

linker ld

10
推荐指数
1
解决办法
3809
查看次数

.so 文件中的链接器脚本?(libc.so) 是吗?

我目前正在尝试让 python 在我的 NAS 上运行,这是一个 Zyxel NSA325。

我确实设法让 python 2.7 和 pip 运行,并且我能够使用 pip 成功安装看门狗模块。我按照这些说明让 python 和 pip 运行 btw。

当我运行一个使用 watchdog 模块的 python 脚本时,我得到了一个非常错误的错误,很难。

/usr/local/zy-pkgs/ffproot/ffp/bin/python2.7: '/ffp/lib/libc.so' is not an ELF file
Run Code Online (Sandbox Code Playgroud)

我用谷歌搜索了 ELF 文件的标题应该是什么样子,显然它以7f 45 4c 46转换为.ELF. 所以我做了一个快速cat /ffp/lib/libc.so的结果是:

/* GNU ld script
 * Use the shared library, but some functions are only in
 * the static library, so try that secondarily. */
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
         "elf32-littlearm")
GROUP ( libc.so.0 …
Run Code Online (Sandbox Code Playgroud)

linux arm python linker elf

10
推荐指数
1
解决办法
2158
查看次数

有没有办法检查 .so 是否已使用 -Bsymbolic-functions 标志编译?

我的应用程序使用动态加载自定义代码dlopen。对于常用符号,默认使用全局符号表。

但是,我想提供以下功能 - 如果用户已将他们的 so 与 链接-Bsymbolic-functions,我会将RTLD_DEEPBIND标志传递给该dlopen函数。

有没有办法以编程方式知道 .so 是否与-Bsymbolic-functions使用 C链接?

linker dynamic-loading

7
推荐指数
1
解决办法
1587
查看次数