使用mkbundle从C#源代码创建Linux可执行文件时出现问题
本文关键字:可执行文件 问题 Linux 创建 mkbundle 源代码 使用 | 更新日期: 2023-09-27 18:23:59
正如本线程和这里所提到的,我正在使用mkbundle -o newfile oldfile.exe --static
(操作系统:Ubuntu 11.10 64位,Mono:2.10.5)创建一个文件,该文件将在Apache Web服务器(操作系统为Debian GNU/Linux 32位)上执行。这里,oldfile.exe
是使用mcs oldfile.cs
编译C#Hello World代码的结果。在原始系统(带有Ubuntu)上,该文件是可执行的。然而,当我在Apache Web服务器上调用newfile
时,我会得到错误:
无法执行二进制文件
此外,当进行file newfile
时,它会显示
ELF 64位LSB可执行文件,x86-64,版本1(SYSV),动态链接(使用共享库),未剥离
我怀疑如果mkbundle按预期工作,那么它应该读取
静态链接。。。
不是吗?有人知道为什么该文件不能在服务器上执行吗?这是因为32位/64位的问题吗?
64位Mono的mkbundle
生成64位可执行文件,并且不能在32位内核上运行64位可运行文件。由于mkbundle
没有生成32位二进制文件的选项,您显然需要使用32位Mono生成可执行文件(理论上您可以在64位系统上安装32位Mono-,但这不是很容易,所以我建议在某个地方安装32位系统,可能是在VM中)。