Mono C#:Mkbundle'D "Hello World"スクリプトは、Webサーバー上の終了コード "11"だけで実行されます
質問
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 - アウト: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 Exitコード11は、このとこのコードリストを終了します。
両方のマシンは64ビットのLinux上にあり、「ファイルHelloWorld」は以下を返します...
ローカルマシン上:
Helloworld:ELF 64ビットLSB実行可能ファイル、X86-64、バージョン1(SYSV)、GNU / Linux 2.6.24、BUILDID [SHA1]= FBC9731FE51C69DC40D8、ストリップ
Webサーバー:
Helloworld:ELF 64ビットLSB実行可能ファイル、X86-64、バージョン1(SYSV)、動的にリンクされている(共有LIBSを使用)、ストリップ
「動的にリンクされている(共有LIBSを使用する(共有LIBSを使用)、ストリップされたものはまだいくつかの組み込みライブラリまたはモノラルランタイムがまだ行方不明になっていることを意味しますか?
解決
私はバンドルを実行するときに、Webサーバーと同じOSを持つ仮想マシンを作成しました(セグメンテーション障害(Core Dumped) 'を実行して、終了コード' 11 'を持っています。MkbundleはLinuxマシンにモノラル書込ソフトウェアを展開するための完全な互換性のある方法ではありません。
SO AENDでは、マイクロマシンでモノラルをインストールし、コンパイル済み、およびMKBundle'Dをインストールし、ファイルをWebサーバーにアップロードした後、それを実行できました。