我的问题很具体。我必须编写一个可以处理文件的简单程序,并且应在arm 32bit(android)上运行。关键点是它必须使用_llseek syscall。此系统调用存在于32位linux内核中,但在64位内核中不存在。

从技术上讲,我可以在手臂设备(在我的情况下为手机)上编写和运行此程序,但是我在通常用于测试和调试的64位设备上进行操作。在这种情况下,由于缺少此系统调用,我的程序无法编译并无法在我的64位计算机上运行。

有什么解决方法?我需要一些友好的测试/调试环境。安装32位虚拟Linux是唯一的选择吗?
预先感谢Alex



-m32标志起作用,实际上64位内核接受了字节码。太愚蠢了,我自己没有参加这个简单的选择。

或换种说法。我没有注意到64位内核并行实现了所有32位调用,即使本机64位代码中不存在这些调用。

最佳答案

您可以在分区中安装整个Linux 32位(x86 / 32,即ia32)系统-或仅在子目录中-并在64位x86-64 Linux内核的chroot下运行它(因为x86-64的64位内核)通常配置为能够运行32位x86代码,即execve(2) 32位x86 ELF可执行二进制文件)debootstrap命令(在Debian及相关产品上)记录了这种用法,另请参见(您可能不需要只在相关的32位chroot中安装每个软件包)。

您还可以使用schroot在64位x86-64机器上编译为32位x86 ELF二进制文件。您可能需要其他软件包(它们的名称通常带有gcc -m32multilibia32)。

当然,您需要重新编译应用程序,因为ARM与x86 / 32位不同

但是,您不能在64位x86-64 Linux上运行ARM 32位应用程序(仅x32 32位)。要在x86上运行ARM应用程序,您需要ARM emulator(例如qemu ....)

因此,首先在64位x86-64 Linux系统上使用32位chroot版本环境在x86 / 32位上调试您的东西。

关于linux - 如何在64位计算机上测试32位特定于内核的系统调用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31315932/

10-16 20:44