MONO C # : MKBUNDLE'D "HELLO WORLD"스크립트는 웹 서버에서 종료 코드 "11"만으로 실행됩니다.
문제
모노 런타임이 설치되어 있지 않은 웹 서버에서 Mono (C #) 코드를 실행하고 싶습니다. mkbundle은 네이티브 코드를 생성 할 수 있기 때문에 먼저 웹 서버에서 로컬로 실행되지 않는 양쪽에서 작동하는 일반적인 "헬로 세계"스크립트를 얻으려고합니다.
# helloworld.cs 스크립트 :
using System;
public class HelloWorld
{
public static void Main()
{
System.Console.WriteLine("Hello, World!");
}
}
.
i를 사용하여 컴파일하고 번들링합니다.
$ gmcs helloworld.cs -out : helloworld.exe
$ mkbundle -o helloworld helloworld.exe --static --deps
웹 서버 에서이 스크립트를 실행하는 유일한 허용 된 방법은 다음을 수행하는 PHP 스크립트를 사용하는 것입니다.
$cmd = "./helloworld";
exec($cmd, $array, $return_code);
var_dump($array);
//passthru($cmd, $return_code);
var_dump($return_code);
.
로컬 에서이 스크립트는 작동하고 다음과 같은 응답을 얻습니다.
어레이 (1) { [0]=> String (13) "Hello, World!" } int (0)
그러나 웹 서버에서 이것은 모든 스크립트가 반환
배열 (0) {} int (11)
bash 종료 코드 11은 이 및 이 종료 코드 목록.
두 시스템 모두 64 비트 Linux에 있으며 "파일 helloworld"는 다음을 반환합니다. 로컬 컴퓨터에서 :
HelloWorld : GNU / Linux 2.6.24, BuildID [SHA1]= FBC9731FB13202C604B025BA3EEFE51C69DC40D8,
웹 서버에서
HelloWorld : ELF 64 비트 LSB 실행 파일, x86-64, 버전 1 (SYSV), 동적으로 연결됨 (공유 libs 사용), 제거
는 "동적으로 연결됨 (공유 LIBS를 사용), 제거 된"여전히 일부 임베디드 라이브러리 또는 모노 런타임이 아직 없음을 의미합니까?
해결책
i가 번들을 실행할 때 웹 서버와 동일한 OS가있는 가상 컴퓨터를 만들었습니다. 이는 종료 코드 '11'이있는 '세그먼트 화 오류 (코어 덤프)'를 가져 왔습니다.MKBundle은 Linux 기계에 Mono 작성 소프트웨어를 배포하는 완벽한 호환 가능한 방법이 아닙니다.
이므로 가상 컴퓨터에 Mono를 설치하고 컴파일 된 MkBundled의 코드를 설치하고 웹 서버에 파일을 업로드 한 후