我的 64 位 ARM 平台附带 Ubuntu 16,我需要运行为 ARM32 编译的 32 位应用程序:
[root@artik publish]# file myApp
myApp: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.32, BuildID[sha1]=b455beda566647d2bfebccd157261c60c60f64b3, stripped
是否可以在 ARM64 位 Ubuntu 16.0 上运行 ARM32 位应用程序?需要哪些 32 位库才能支持 ARM32 位应用程序?我应该从哪里安装它们?
下面的文章回答了针对 x86 的相同问题,但是如何在 ARM64 上为 Arm32 应用程序执行此操作?
提前致谢,Emeel
答案1
我找到了一种方法来做到这一点,如以下链接中所述(由 James Kingdon 解释,感谢!)
https://forum.armbian.com/topic/4764-running-32-bit-applications-on-aarch64/
这些是在 Ubuntu 16.04/AARCH64 上运行简单的 ARM32 应用程序的步骤。
dpkg --add-architecture armhf
apt-get update (ignore the missing x386 packages and hope for the best)
apt-get install libc6:armhf libstdc++6:armhf
创建到下面的 32Bit 库的符号链接:
cd /lib
ln -s arm-linux-gnueabihf/ld-2.23.so ld-linux.so.3
执行此操作后,我的 .NETCore 2.1 应用程序抛出错误,我通过禁用全球化解决了该问题。之后,ARM32 位应用程序成功运行。
—埃米尔
答案2
我在 Debian 11 上使用 .NET 6 时遇到了类似的问题。以下解决方案效果很好:
sudo dpkg --add-architecture armhf
sudo apt install libicu67:armhf libstdc++6:armhf libssl1.1:armhf
解释:
解决方案类似于@EmEn的帖子(https://askubuntu.com/a/1090440/1620736),但不需要禁用全球化,因为这是由 libicu67 提供的(版本号将取决于 Linux 版本)。
对于我的项目,我还需要 libssl*。这似乎取决于使用哪种功能。找到了 .NET Core 3.* 的链接:https://gist.github.com/richlander/467813274cea8abc624553ee72b28213#Dependencies
无论如何,“libc6:armhf”是作为“libstdc++6:armhf”的依赖项安装的,所以我将其从命令行中删除。
我没有看到在我的系统上创建符号链接的任何理由。