Mono C#:MKBundle'd“Hello World”脚本仅在Web服务器上的退出代码“11”执行
题
我想在没有安装Mono运行时的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
$ mkbundle -o helloworld 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服务器上,这是所有脚本返回
数组(0){} int(11)
两台机器都在64位Linux上,“文件helloworld”返回以下...
在本地机器上:
helloworld:elf 64位lsb可执行文件,x86-64,版本1(sysv),动态链接(使用共享libs),用于GNU / Linux 2.6.24,BuildID [SHA1]= FBC9731FB13202C604B025BA3EEFE51C69DC40D8,不剥离
在Web服务器上:
HelloWorld:ELF 64位LSB可执行文件,X86-64,版本1(SYSV),动态链接(使用共享libs),剥离
可能“动态链接(使用共享libs),Striped”仍然意味着一些嵌入的库或单声道运行时仍然缺少?
解决方案
我创建了一个具有与Web服务器相同的虚拟机,当运行捆绑包时,我得到了“分割故障(核心转储)”,它具有退出代码'11'。MKBundle不是一种在Linux机器上部署Mono书面软件的完全兼容的方式。
所以最后我在虚拟机上安装了单声道,编译和mkbundle的代码,并在将文件上载到Web服务器后,它能够执行它。