Проблемы при создании исполняемого файла Linux из исходного кода C # с использованием mkbundle - PullRequest
4 голосов
/ 09 февраля 2012

Как уже упоминалось в этом потоке , а также здесь Я использую mkbundle -o newfile oldfile.exe --static (ОС: Ubuntu 11.10 64bit, Mono: 2.10.5) для создания файла, который должен бытьисполняемый файл на веб-сервере Apache (ОС: Debian GNU / Linux 32bit).Здесь oldfile.exe был результатом компиляции C # -Hello-World-Code с использованием mcs oldfile.cs.В исходной системе (с Ubuntu) файл является исполняемым.Однако всякий раз, когда я вызываю newfile на веб-сервере Apache, я получаю сообщение об ошибке:

не может выполнить двоичный файл

Кроме того, при выполнении file newfile он говорит

ELF 64-битный исполняемый LSB, x86-64, версия 1 (SYSV), динамически связанный (использует разделяемые библиотеки), не удален

Я подозреваю, что mkbundle работал какон должен, тогда он должен был прочитать

... статически связанный ...

не так ли?У кого-нибудь есть идея, почему файл не исполняется на сервере?Это проблема из-за 32-битного / 64-битного?

1 Ответ

7 голосов
/ 09 февраля 2012

mkbundle из 64-битного Mono генерирует 64-битные исполняемые файлы, и вы не можете запустить 64-битный исполняемый файл на 32-битном ядре. Поскольку mkbundle не имеет возможности генерировать 32-битные двоичные файлы, вам, очевидно, необходимо сгенерировать ваш исполняемый файл с 32-битным Mono (теоретически вы можете установить 32-битный Mono в вашей 64-битной системе, но это не так просто, так Я предлагаю установить 32-битную систему где-нибудь, может быть, в ВМ).

...