我想在没有安装 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]=> 字符串(13)“你好,世界!” } 整数(0)
但在 Web 服务器上,这就是脚本返回的所有内容
数组(0){}整数(11)
根据这个和这个退出代码列表,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),动态链接(使用共享库),剥离
可能“动态链接(使用共享库),剥离”仍然意味着仍然缺少一些嵌入式库或单声道运行时?