2010-11-17 55 views
3

Je vais publier une application écrite en OCaml et j'avais l'intention de la distribuer par code source.Compilation pour de nombreuses distributions Linux

Le problème est que le système de développement OCaml n'est pas quelque chose de léger ni si commun à avoir installé donc je voudrais le libérer aussi de manière binaire pour divers systèmes d'exploitation.

  • de Windows ne fait pas problème puisque je peux le compiler par Cygwin et de le distribuer avec les DLLs nécessaires
  • OS X n'est pas un problème aussi puisque je peux le compiler et de le distribuer facilement (pas de dépendances externes de ce que je 'ai essayé)

En arrivant à Linux problèmes arrivent car je ne sais pas vraiment quel est le meilleur moyen de compiler et de le distribuer. Le programme lui-même ne dépend de rien (tout est lié statiquement) mais comment couvrir de nombreuses distributions?

J'ai un serveur ubuntu 10 virtualisé avec une architecture amd64, j'ai utilisé cette machine pour tester le programme sous Linux et tout fonctionne bien. Bien sûr, si j'essaie de déplacer le binaire vers un ubuntu 32bit, il cesse de fonctionner et je n'ai pas pu essayer différentes distributions ... y at-il des astuces pour gérer ce genre de problème? (Qui semble récurrent)

par exemple:

  • peut compiler à la fois 32 bits et 64 de la même machine?
  • un binaire compilé sous ubuntu fonctionnera-t-il également sur d'autres distributions?
  • quelles branches dois-je prendre en compte lorsque je souhaite couvrir autant de distributions que possible?

Répondre

3
  • Vous pouvez produire généralement 64 et binaires 32 bits sur un 64 Bit machine avec une relative facilité - c'est à dire la distribution a généralement le bon support dans ses paquets de compilateur et vous pouvez réellement tester votre construction.Notez que le système d'exploitation doit être en 64 bits, pas seulement le CPU.

  • Les binaires statiques s'exécutent généralement partout, avec un support adéquat du noyau et du processeur - gardez un œil sur les options de votre compilateur. Ils sont votre meilleur pari pour la compatibilité. Les bibliothèques partagées peuvent être un problème. Pour résoudre ce problème, les fichiers binaires liés à des bibliothèques partagées peuvent être regroupés avec ces bibliothèques et exécutés avec un script loader si nécessaire. Vous devriez au moins cibler Debian/Ubuntu avec les paquets dpkg, Redhad/Fedora/Mandriva avec RPM et SUSE/OpenSUSE avec RPM (je mentionne ces deux cas RPM séparément car vous pourriez avoir besoin de produire des paquets séparés pour ceux-ci) familles "de distributions). Vous devez également fournir un programme d'installation .tar.bz2 ou .run pour le reste.

  • Vous pouvez consulter les options fournies par ex. Oracle pour Java et VirtualBox pour voir comment ils fournissent leurs logiciels.

1

La meilleure solution consiste à libérer le code source sous licence libre. Vous pouvez l'empaqueter vous-même pour un couple de distributions (par exemple Debian, Fedora), puis coopérer avec d'autres personnes en le transférant à d'autres personnes. Les mainteneurs effectueront souvent la plupart de ce travail avec seulement quelques changements en amont requis.

0

Je vous recommande de mettre en package un binaire 32 et 64 bits pour .deb et RPM, de cette façon vous pouvez toucher la plupart des distributions majeures (Debian, Fedora, openSUSE, Ubuntu). Donnez simplement des instructions d'installation claires concernant les dépendances, la ligne de commande fu pour les autres distributions, etc. et vous ne devriez pas avoir beaucoup de problème à simplement distribuer une archive tar source.

1

Oui, vous pouvez compiler pour les 32 et 64 bits de la même machine: http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html

Très probablement un fonctionnement binaire sur Ubuntu fonctionne sur d'autres distributions, la seule chose que vous devez vous inquiéter si vous êtes en utilisant des librairies partagées (surtout si vous utilisez un framework GUI ou des choses comme ça).

Je ne sais pas ce que vous entendez par branche, mais si vous parlez de la distribution, j'utiliser le plus vanille distribution Ubuntu ...

1

Vous pourriez envisager de le construire dans le openSUSE Build Service. Bien géré par openSUSE, cela construit des paquets pour:

  • openSUSE SUSE
  • Enterprise variantes
  • Mandiva
  • Fedora
  • Red Hat Enterprise/CentOS
  • Debian
  • Ubuntu