Mono C#:MKBundle'd“Hello World”脚本仅在Web服务器上的退出代码“11”执行

StackOverflow https://stackoverflow.com//questions/24014152

  •  21-12-2019
  •  | 
  •  

我想在没有安装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)

bash退出代码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服务器后,它能够执行它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top