Компиляция для многих дистрибутивов Linux - PullRequest
4 голосов
/ 17 ноября 2010

Короче говоря, я собираюсь выпустить приложение, написанное на OCaml, и я планировал распространять его по исходному коду.

Проблема в том, что система разработки OCaml не является чем-то легким и не настолько распространенным, чтобы иметьустановлен, поэтому я хотел бы выпустить его также в двоичном виде для различных операционных систем.

  • Windows не создает проблем, так как я могу скомпилировать его через Cygwin и распространить его с необходимыми DLL
  • OS X тоже не проблема, так как я могу скомпилировать и легко распространять ее (без внешних зависимостей от того, что я пробовал)

При поступлении в Linux возникают проблемы, так как я на самом деле не знаюэто лучший способ скомпилировать и распространить его.Сама программа ни от чего не зависит (все статически связано), но как охватить многие дистрибутивы?

У меня есть сервер 10 ubuntu, виртуализированный с архитектурой amd64, я использовал эту машину для тестирования программы под Linuxи все работает отлично.Конечно, если я попытаюсь переместить бинарный файл в 32-битную Ubuntu, он перестанет работать, и я не смог попробовать разные дистрибутивы ... Есть ли хитрости для решения такого рода проблем?(это кажется повторяющимся)

например:

  • можно ли скомпилировать 32-битные и 64-битные файлы с одной и той же машины?
  • будет ли двоичный файл, скомпилированный под Ubuntu, работать такжев других дистрибутивах?
  • какие «ветви» следует учитывать при желании охватить как можно больше дистрибутивов?

Ответы [ 5 ]

3 голосов
/ 17 ноября 2010
  • Как правило, вы можете создавать 64- и 32-битные двоичные файлы на 64-битной машине относительно легко - то есть дистрибутив обычно имеет надлежащую поддержку в своих пакетах компилятора, и вы действительно можете протестировать свою сборку. Обратите внимание, что ОС тоже должна быть 64-битной, а не только CPU.

  • Статические двоичные файлы обычно работают везде, при условии адекватной поддержки со стороны ядра и процессора - следите за опциями вашего компилятора, чтобы гарантировать это. Они - ваш лучший выбор для совместимости. Общие библиотеки могут быть проблемой. Чтобы справиться с этим, двоичные файлы, связанные с общими библиотеками, могут быть связаны с этими библиотеками и запускаться со скриптом загрузчика при необходимости.

  • Вы должны, по крайней мере, ориентироваться на Debian / Ubuntu с пакетами dpkg, Redhad / Fedora / Mandriva с RPM и SUSE / OpenSUSE с RPM снова (я упомяну эти два случая RPM отдельно, потому что вам может потребоваться создать отдельные пакеты для этих «семейства» раздач). Вы также должны предоставить установщик .tar.bz2 или .run для остальных.

  • Вы можете взглянуть на опции, предоставляемые, например, например. Oracle для Java и VirtualBox, чтобы узнать, как они предоставляют свое программное обеспечение.

1 голос
/ 17 ноября 2010

Вы можете посмотреть на сборку в openSUSE Build Service Хотя он запускается openSUSE, он создает пакеты для:

  • openSUSE SUSE
  • Варианты предприятия
  • Mandiva
  • Fedora
  • Red Hat Enterprise / CentOS
  • Debian
  • Ubuntu
1 голос
/ 17 ноября 2010

Да, вы можете компилировать как 32, так и 64 бита с одного компьютера: http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html

Скорее всего, бинарный файл, работающий в Ubuntu, будет работать в других дистрибутивах, единственное, о чем вам следует беспокоиться, если вы используете разделяемые библиотеки (особенно, если вы используете какую-то инфраструктуру GUI или тому подобное).

Не уверен, что вы подразумеваете под веткой, но если вы говорите о дистрибутиве, я бы использовал самый ванильный дистрибутив Ubuntu ...

1 голос
/ 17 ноября 2010

Лучшее решение - выпустить исходный код по бесплатной лицензии.Вы можете упаковать его для пары дистрибутивов самостоятельно (например, Debian , Fedora ), а затем сотрудничать с другими людьми, портируя его другим.Сопровождающие часто выполняют большую часть этой работы только с несколькими необходимыми изменениями в исходной версии.

0 голосов
/ 17 ноября 2010

Я бы порекомендовал вам просто упаковать 32- и 64-битные двоичные файлы для .deb и RPM, чтобы вы могли работать с большинством основных дистрибутивов (Debian, Fedora, openSUSE, Ubuntu).

Просто дайте четкие инструкции по установке, касающиеся зависимостей, командной строки для других дистрибутивов и т. Д., И у вас не должно возникнуть особых проблем с распространением исходного архива.

...