Mono c#: mkbundle'd "脚本只执行退出码"11"在web服务器上

本文关键字:quot 退出 服务器 web 执行 脚本 mkbundle Mono | 更新日期: 2023-09-27 18:06:30

我想在没有安装Mono Runtime的Web服务器上运行Mono(c#)代码。由于mkbundle能够生成本机代码,因此我首先尝试在两侧都运行一个普通的"Hello World"脚本,该脚本在本地运行,而不是在Web服务器上运行。

c# HelloWorld.cs脚本:
 using System;
 public class HelloWorld
 {
    public static void Main()
    {
       System.Console.WriteLine("Hello, World!");
    }
 }

我编译和绑定使用:$ gmcs HelloWorld.cs out:HelloWorld.exe
helloworld .exe——static——deps

我唯一允许在web服务器上执行这个脚本的方法是使用PHP脚本,它有以下内容:

 $cmd = "./helloworld";
 exec($cmd, $array, $return_code);
 var_dump($array);
 //passthru($cmd, $return_code);
 var_dump($return_code);

在本地,这个脚本工作,我得到以下响应:

阵列(1){[0] =>字符串(13)"你好,世界!"}int (0)

但是在web服务器上这是所有脚本返回的

array(0) {} int(11)

根据这个和这个退出代码列表,Bash退出代码11是非标准的。

两台机器都在64位Linux上,"file helloworld"返回以下内容…
在本地机器上:

helloworld: ELF 64位LSB可执行文件,x86-64,版本1 (SYSV),动态链接(使用共享库),用于GNU/Linux 2.6.24, BuildID[sha1]=fbc9731fb13202c604b025ba3eefe51c69dc40d8,未剥离

Web服务器:

helloworld: ELF 64位LSB可执行文件,x86-64,版本1 (SYSV),动态链接(使用共享库),剥离

可能"动态链接(使用共享库),剥离"仍然意味着一些嵌入式库或单运行时仍然缺失?

Mono c#: mkbundle'd "脚本只执行退出码"11"在web服务器上

我创建了一个与Web服务器具有相同操作系统的虚拟机,当运行bundle时,我得到'Segmentation fault (core dumps)',其退出代码为'11'。mkbundle不是在Linux机器上部署Mono编写的软件的完全兼容的方式。

所以最后我在虚拟机上安装了Mono,编译并mkbundle了代码,在将文件上传到Web服务器后,它就能够执行了。