Попытка скомпилировать приложение x64 на Linux с моно дает ошибку PE32Plus? - PullRequest
2 голосов
/ 21 июля 2010

полная ошибка:

Ошибка CS8088: .NET Runtime не поддерживает `PE32Plus '.Пожалуйста, используйте последнюю версию Mono.(CS8088) (тест)

это в системе x86_64 linux с mono и monodevelop, установленным как x86_64.Это происходит с любым приложением, которое я пытаюсь скомпилировать как x64, включая пустую тестовую программу.

У меня есть mono 2.6.7 install и monodevelop 2.4.3, может ли кто-нибудь там рассказать.

Из того, что я могу сказать, PE32Plus является типом файлов для 64-битных приложений, но на сайте mono написано, что они поддерживают среды x64

Ответы [ 2 ]

2 голосов
/ 31 марта 2011

Управляемые приложения запускаются через 'mono myApp.exe' в Linux. Указанная версия 'mono' определяет, является ли приложение 64-битным или 32-битным. Если вы используете 32-битную моно-среду выполнения, управляемое приложение будет работать в 32-битном режиме. Если вы используете 64-битную моно-среду выполнения, управляемое приложение будет работать в 64-битном режиме. Windows поддерживает запуск управляемого исполняемого файла напрямую через поддержку ОС и использует информацию о платформе, чтобы определить, следует ли запускать управляемый код как 32- или 64-разрядный.

Таким образом, информация о платформе имеет значение только для Windows с .Net. Моно игнорирует эту информацию. Я считаю, что самые последние моно поддерживают компиляцию с переключателем платформы x64. Если нет, то можно скомпилировать его как x86 и запустить с 64-битной моно-средой выполнения.

1 голос
/ 23 июля 2010

Я недавно спросил то же самое на IRC-канале моно, и кажется, что он не поддерживается.

В частности, мне сказали не использовать "-platform: x64", потому что не только среда выполнения игнорирует его, но SREРеализация (System.Reflection.Emit) не знает, как создавать двоичные файлы PE32 +.

...