MONO C # : MKBUNDLE'D "HELLO WORLD"스크립트는 웹 서버에서 종료 코드 "11"만으로 실행됩니다.

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

  •  21-12-2019
  •  | 
  •  

문제

모노 런타임이 설치되어 있지 않은 웹 서버에서 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의 코드를 설치하고 웹 서버에 파일을 업로드 한 후

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top