После упаковки с помощью mkbundle2 конечный компьютер жалуется на libmono.so. Почему?

Я думал, что целью mkbundle2 было позволить машине без установленного моно запускать моно приложение. Но, похоже, это не упаковка libmono.so. Я не уверен, предполагается ли это или нет, но машина назначения жалуется, что не может найти libmono.so.0, когда я запускаю пакет. Зачем ему искать этот файл? А если он нужен, то зачем его искать где угодно, только не в комплекте? И если он должен быть в комплекте, то почему mkbundle2 его туда не положил? Я использую опцию "--deps" для включения всех зависимостей. Я что-то упускаю?

После добавления параметра --static я получаю следующий результат на целевом компьютере:

Необработанное исключение: System.TypeInitializationException: Исключение было вызвано инициализатором типа для System.Windows.Forms.XplatUI ---> System.DllNotFoundException: libc at (оболочка, управляемая для собственного) System.Windows.Forms.XplatUI:uname (intptr) в System.Windows.Forms.XplatUI..cctor () [0x00000] в: 0

Использование export MONO_LOG_LEVEL=debug показывает дополнительную информацию:

Mono-INFO: DllImport пытается загрузить: «libc». Mono-INFO: место загрузки DllImport: «libc.so». Mono-INFO: ошибка загрузки библиотеки DllImport: «/usr/lib64/libc.so: недопустимый заголовок ELF». Mono-INFO: библиотека загрузки DllImport: './libc.so'. Mono-INFO: ошибка DllImport при загрузке библиотеки «./libc.so: невозможно открыть общий объектный файл: нет такого файла или каталога». Mono-INFO: загрузка DllImport: 'libc'. Mono-INFO: ошибка DllImport при загрузке библиотеки «libc: невозможно открыть общий объектный файл: нет такого файла или каталога».

Означает ли это, что я пытаюсь работать на машине с несовместимым оборудованием? Обе машины — SUSE Linux Enterprise Server 11 (x86_64).


person Fantius    schedule 14.07.2010    source источник


Ответы (1)


Из здесь у нас есть это:

--deps: этот параметр объединяет все указанные сборки для сборок, перечисленных в параметре командной строки. Это полезно для распространения автономного образа.

Вы уверены, что не забыли указать ссылку на сборку в командной строке?

Из этой темы:

Mono Community › General › Mono Community › mkbundle, static, lgmodule< /а>

Похоже, что mkbundle не несет ответственности за упаковку этой сборки. Пользователь решил проблему, установив отсутствующие пакеты, связанные с glib.

Взгляните на статический параметр здесь:

--static: по умолчанию mkbundle динамически связывается с моно и glib. Этот параметр вместо этого вызывает статическую ссылку.

person Leniel Maccaferri    schedule 23.07.2010
comment
+1 за Лениэля. В документации четко указано: для автоматического включения всех упомянутых зависимостей используйте параметр командной строки --deps. - person karlphillip; 25.07.2010
comment
Это была опция --static, которую мне не хватало. Спасибо. - person Fantius; 26.07.2010
comment
Хм, кажется, есть еще проблема. Я отредактировал свой вопрос. - person Fantius; 26.07.2010
comment
Кроме того, я не понимаю смысла динамической привязки к моно как поведения по умолчанию. Когда вы это сделаете, на целевой машине должен быть установлен моно, верно? Если да, то какой смысл вообще использовать mkbundle? - person Fantius; 26.07.2010
comment
@fantius - Как я уже писал, вам нужно установить пакеты, связанные с glib, на целевую машину, а не моно, а конкретный пакет. - person Leniel Maccaferri; 30.07.2010