我目前在 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, ls,vim但是一旦我尝试执行它 -./perl例如 - 我得到 : zsh: Not found ./perl。
这种情况对我来说是可以理解的。而且 :
/chr_path/some_path/perl …从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) 我有一个像这样链接的可执行文件:
$ 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(因为构建工具非常复杂)有可能在这里做我希望的事情吗?
有没有人gold以前使用过链接器?为了链接一个相当大的项目,我不得不使用它而不是 GNU ld,后者抛出了一些错误并且无法链接。
gold链接器如何能够链接ld失败的大型项目?某处是否存在某种记忆欺骗?
的手册页ld参考了AT&T’s Link Editor Command Language,但是AT&T’s Link Editor Command Language除了指向所述手册页之外,Google 搜索并没有提供关于什么是或曾经是什么的令人满意的解释,而我预计前五个结果中会出现一个维基百科页面。
这里似乎缺少一段重要的计算历史。有没有人有关于这种语言的一些参考或历史文档?我们可以放在维基百科中为子孙后代保存的东西吗?
我安装了一个应用程序 [例如 fdisk]。但它需要库来执行。我正在寻找实用程序/工具,它将帮助我从已安装的二进制文件中创建一个静态二进制文件。这样我就可以在任何地方使用它。
我找到的唯一可靠的工具ErmineLight来自
这里,但这是共享软件。
是否有任何开源软件可用于相同的?
EDIT fdisk 只是一个例子。我大部分时间都在 LFS 上工作,所以如果我必须使用任何实用程序,我需要按照以下步骤操作
- 下载源码
- 配置
- 制作
- 做测试
- 进行安装,
因此,为了节省时间,我正在寻找一种解决方案,在该解决方案中,我将从 debian、fedora 或其他发行版制作静态二进制文件,在 LFS 上试用,如果它工作正常或按照我的要求,我会使用源代码进行编译。
我知道这个问题不是很新,但似乎我无法解决我自己的问题。
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正确路径的正确方法?
虽然两者都被称为“链接器”并用于链接二进制文件,但我真的无法弄清楚它们之间的区别。谁能告诉我他们的区别?
我目前正在尝试让 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) 我的应用程序使用动态加载自定义代码dlopen。对于常用符号,默认使用全局符号表。
但是,我想提供以下功能 - 如果用户已将他们的 so 与 链接-Bsymbolic-functions,我会将RTLD_DEEPBIND标志传递给该dlopen函数。
有没有办法以编程方式知道 .so 是否与-Bsymbolic-functions使用 C链接?