Uhl*_*hli 5 arm multiarch 12.10 ld
我在熊猫板上使用 Ubuntu 12.10 (ARMHF) 发行版。我想运行为 ARMEL 编译的应用程序。由于动态加载器位置发生变化,这是不可能的(https://wiki.linaro.org/OfficeofCTO/HardFloat/LinkerPathCallApr2012)
我成功地创建了以下符号链接 /lib/ld-linux.so.3 -> /lib/ld-linuxarmhf.so.3
有没有办法安装便携包?是否有理由不通过发行版完成此操作?
提前致谢
动态链接器是在编译时嵌入的。查看正在使用哪个动态链接器运行。readelf -l /usr/bin/foo | grep Request
改变这一点的唯一方法是调整 gcc 规范文件。看gcc -dumpspecs | grep ld-linux
。或者通过在构建时将 --dynamic-linker 标志传递给链接器,例如gcc -Wl,--dynamic-linker,/lib/ld-linux.so.3 foo.c
然而,如果工具链设置正确,那么这些都不需要,而且你真的不应该搞乱它,除非你确实有理由这样做。
简而言之,您的解决方案可能是最好的解决方案,但是我会尝试找到armhf包并使用它(如果可以的话),或者重建包。
也许,这样的兼容性包不存在(为了运行旧的、第3方armhf二进制文件,而不是/lib/ld-linux.so.3
新标准,同意/lib/ld-linuxarmhf.so.3
,对吧?),因为该包(如果安装)会给出“虚假承诺”适合任何 Armel 二进制文件。但是,如果我理解正确的话,armhf 动态链接器必须破坏 armel 二进制文件,因为 ABI 不兼容。(在这种情况下,正确的解决方案是包装一些特殊的非标准 armhf 二进制文件,以便动态链接器的预期位置适合您的系统。或者在二进制文件中重写此值。如果可能的话。那么当您尝试运行真正的 armel 二进制文件时,这不会导致任何问题。)
另一方面,如果您想在armhf系统上运行真正的armel二进制文件,您只需选择“multiarch”(因此使用真正的armel动态链接器,而不是符号链接!):为您的系统安装armel先决条件阿梅尔二进制文件。在先决条件中,libc6:armel
或者类似的(如果我错了,请更正 pkg 名称)肯定会包括所需的 /lib/ld-linux.so.3
.
(关于ABI的不兼容性:据我所知,在armhf中,浮点参数直接在浮点寄存器中传递,而在armel中,它们在整数寄存器中传递。这种间接为支持浮点的ARM增加了额外的成本-点,这就是为什么armhf更适合现代ARM。)