После упаковки с помощью 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. Эта опция заставляет это статически связываться вместо этого.

Другие вопросы по тегам