После упаковки с помощью 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
Использование экспорта 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).
1 ответ
Отсюда мы имеем это:
--deps: эта опция объединит все ссылочные сборки для сборок, перечисленных в опции командной строки. Это полезно для распространения автономного изображения.
Вы уверены, что не забываете ссылаться на сборку в командной строке?
Из этой темы:
Сообщество Mono ›Общее› Сообщество Mono ›mkbundle, static, lgmodule
Похоже, что mkbundle не несет ответственности за упаковку этой сборки. Пользователь решил проблему, установив недостающие пакеты, связанные с glib.
Посмотрите на статический параметр здесь:
--static: по умолчанию mkbundle динамически связывается с mono и glib. Эта опция заставляет это статически связываться вместо этого.