Программа, сгенерированная mkbundle (из программы C#), работает в Ubuntu, но не работает в Redhat.

Я написал программу на Visual C# 2010 Express для Windows 7, 64 бит. После некоторых усилий мне удалось заставить его работать на моей виртуальной машине Ubuntu (32-разрядная версия) (перекомпилирован в MonoDevelop и использовал mkbundle). Клиент сообщил мне, что у него следующая версия: «Linux version 2.6.18-274.el5.028stab093.2 (root@rhel5-build-x64) (gcc version 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++.


person Tofig Hasanov    schedule 05.01.2012    source источник
comment
Я бы посоветовал вам потратить время на изучение Linux. Прочтите достаточно хороших книг, объясняющих, для чего на самом деле нужен libc.so.   -  person Basile Starynkevitch    schedule 05.01.2012
comment
Я, конечно, буду :) К сожалению, мне нужно закончить этот проект в ближайшее время.   -  person Tofig Hasanov    schedule 05.01.2012
comment
Сделайте свою программу бесплатной и с открытым исходным кодом, а ее упаковку оставьте для дистрибутивов.   -  person Basile Starynkevitch    schedule 05.01.2012


Ответы (1)


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

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

person Rolf Bjarne Kvinge    schedule 05.01.2012
comment
Вы имеете в виду, что я могу просто взять код на сервер и скомпилировать его там? Но на его сервере нет моно, как я буду компилировать C# код? - person Tofig Hasanov; 06.01.2012
comment
В том-то и загвоздка, что сначала нужно поставить mono на сервер (или создать свою виртуальную машину CentOS, где можно сделать это самому, ничего не меняя на машине клиента). - person Rolf Bjarne Kvinge; 06.01.2012