Программа, сгенерированная mkbundle (из программы на C #), работает в Ubuntu, но не работает в Redhat - PullRequest
0 голосов
/ 05 января 2012

Я написал программу для Visual C # 2010 Express в Windows 7, 64-разрядная версия.После некоторых трудностей мне удалось заставить его работать под моей виртуальной машиной Ubuntu (32-битной) (перекомпилирована в MonoDevelop и использовала mkbundle).Клиент сказал мне, что у него есть следующая версия: «Linux версия 2.6.18-274.el5.028stab093.2 (root @ rhel5-build-x64) (gcc версия 4.1.2 20080704 (Red Hat 4.1.2-46))».Команда "cat / etc / redhat-release" возвращает "CentOS release 5.7 (Final)".Я получил доступ к его серверу и загрузил вывод mkbundle (который отлично работает под Ubuntu).Программа вернула следующую ошибку:

$ ./ProgName img.jpg
./ProgName: /lib/libc.so.6: version `GLIBC_2.9' not found (required by ./ProgName)
./ProgName: /lib/libc.so.6: version `GLIBC_2.11' not found (required by ./ProgName)
./ProgName: /lib/libc.so.6: version `GLIBC_2.8' not found (required by ./ProgName)

Как мне решить эту проблему?У меня очень мало знаний о системах Linux.Я предполагаю, что мне нужно скачать указанные выше библиотеки, но у меня есть следующие вопросы:

  1. Если я скачаю эти библиотеки, может ли это каким-либо образом повредить сервер?Я не хотел бы вредить клиентскому серверу.
  2. Почему программе, которая была "mkbundled", нужны дополнительные библиотеки?Я использовал «--static» с mkbundle, и на выходе получился файл размером 5,7 Мб, поэтому я подумал, что в нем уже есть все необходимые библиотеки.

Есть ли другой способ решения этой проблемы?

РЕДАКТИРОВАТЬ: Я думаю, что, возможно, если мне удастся скомпилировать проект на сервере клиента, он будет работать, но я не могу найти моно для этой версии Linux.Есть ли способ установить моно в этой системе?Если нет, то какие еще есть варианты?В худшем случае я думаю переписать свою программу на C ++.

1 Ответ

1 голос
/ 06 января 2012

Как правило, создание одного бинарного файла для разных дистрибутивов Linux - это болезненное и трудное занятие, особенно если вы мало знаете о Linux.Проблема в том, что двоичная совместимость между дистрибутивами (или даже разными версиями одного и того же дистрибутива) встречается редко.

Мое предложение будет распространять управляемую сборку (т.е. не запускать программу через mkbundle), но я понимаю, что таммогут быть веские причины, по которым вы этого не делаете.Другой вариант - запустить mkbundle в системе, аналогичной системе вашего клиента, и отправить эту версию ему.

...