我在主机64位操作系统上设置了32位Debian VM。我使用NFS共享了源代码目录。
当我在该共享文件夹中编译时,我无法运行可执行文件:
nicolas@vdeb32:~/Shared$ cc hello.c -o hello
nicolas@vdeb32:~/Shared$ ./hello
-bash: ./hello: cannot execute binary file: Exec format error
nicolas@vdeb32:~/Shared$ file hello
hello: data
但是当输出超出该共享文件夹时,一切正常:
nicolas@vdeb32:~/Shared$ cc hello.c -o /tmp/hello
nicolas@vdeb32:~/Shared$ /tmp/hello
hello
nicolas@vdeb32:~/Shared$ file /tmp/hello
/tmp/hello: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32
这种行为的原因是什么?我发现askubuntu reply但没有解释,无论如何我的主机没有运行Windows,我的可执行文件也不是链接。
感谢。
[编辑]我找到了无法执行文件的原因。编辑hello.c,我注意到该文件一旦保存,只能是零:
nicolas@vdeb32 ~/Shared $ xxd hello.c
00000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000030: 0000 0000 0000 0000 ........
经过一些重试:创建文件时,一切正常。但是当我编辑文件(在共享目录中)时,它会被零覆盖(与原始文件相同的字节数)。编译时,生成的可执行文件也只包含零。我有一个不同的问题,但同样的问题:这种行为的原因是什么?
[EDIT2]当guest虚拟机运行Mint 64位时,使用相同的体系结构没有问题。
答案 0 :(得分:0)
大!我最终设法解决了这个问题。这与编译,编辑或任何其他内容无关。这是一个网络问题。
我在两侧tcpdumped NFS框架(顺便说一句,这让我注意到我的NFS使用的是TCP - 我确信UDP是默认的)。
的解决方案:强>
我根据that procedure禁用了卸载。我还是要了解细节,但最后我得到了一些功能。
PS:创建文件时发生了相同的行为,但是从客户端来看,由于文件没有刷新,所以一切都很好。但是在主机上,同一个文件已经归零。