【问题标题】:Mono C#: mkbundle'd "Hello World" script executes with only the exit code "11" on a web serverMono C#:mkbundle 的“Hello World”脚本在 Web 服务器上仅使用退出代码“11”执行
【发布时间】:2014-07-23 17:29:43
【问题描述】:

我想在没有安装 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
$ 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]=> string(13) "你好,世界!" } 整数(0)

但在 Web 服务器上,这就是脚本返回的全部内容

array(0) { } int(11)

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

两台机器都在 64 位 Linux 上,“文件 helloworld”返回以下内容...
在本地机器上:

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

在网络服务器上:

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

“动态链接(使用共享库),剥离”是否仍然意味着某些嵌入式库或单声道运行时仍然缺失?

【问题讨论】:

    标签: c# unix mono mkbundle


    【解决方案1】:

    我创建了一个与 Web 服务器具有相同操作系统的虚拟机,在运行捆绑包时出现“分段错误(核心转储)”,退出代码为“11”。 mkbundle 不是在 Linux 机器上部署 Mono 编写软件的完全兼容方式。

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

    【讨论】:

      猜你喜欢
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多