Forum Programmation.c++ Bonne pratique de déploiement de programme

Posté par (page perso) . Licence CC by-sa
Tags : aucun
1
26
nov.
2015

Bonjour,
j'ai un programme écrit en C++, faisant appel à plusieurs librairies, qui devrait être déployé sur différentes machines tournant toutes sous Linux, mais pas forcément sur les même distribution.
J'ai lu à plusieurs endroit que tout compiler en statique n'était pas une bonne pratique (et pour la libc pouvait carrément poser problème).
J'aimerai au possible ne pas envoyer les sources du programmes sur les machines sur lesquels il doit être déployé.
Actuellement je compile le programme sur un système équivalent à la machine sur lequel il doit être déployé, et j'utilise rpath-link pour lier des versions de librairies que j'envoie ne même temps que le binaire, mais je trouve cette solution peu satisfaisante.
Existe il une solution plus simple pour moi?
Dois je convaincre le sysadmin de ma boite de passer toutes les machines sur le même système d'exploitation, et de faire la compilation sur l'une d'entre elle?
Ne vaudrait il pas mieux installer les librairies nécessaires sur les machines plutôt que de les lier avec rpath-link?
Merci d'avance pour toute l'aide que vous allez m'apporter :-)

  • # ca depend du contexte

    Posté par . Évalué à 5.

    Ne vaudrait il pas mieux installer les librairies nécessaires sur les machines plutôt que de les lier avec rpath-link?

    ca depend si la problematique c'est l'espace disque/memoire ou la portabilité.
    - les libs partagées permettent d'etre installée une seule fois et utilisée par de multiple programme => gain de place sur le disque
    - ces libs partagées permettent aussi d'etre "partagées" en memoire reduisant la conso

    mais l'usage des libs partagées supposent que ton programme va devoir tenter de fonctionner avec la version N-1, N-2 ou N+1 de la librairie avec laquelle il a été developpé

    à l'inverse la compilation static (donc embarquer la lib dans le binaire) permet de s'affranchir de ces problemes mais va faire un binaire plus gros sur le disque et plus gros en memoire.

    Dois je convaincre le sysadmin de ma boite de passer toutes les machines sur le même système d'exploitation, et de faire la compilation sur l'une d'entre elle?

    si c'est un developpement interne à destination uniquement de la boite, faut en discuter avec lui, quels impacts pour toi, quels impacts pour lui, quels impacts pour les autres outils presents sur ces autres machines…

    • [^] # Re: ca depend du contexte

      Posté par (page perso) . Évalué à 1.

      Bonjour,
      merci beaucoup pour ta réponse.
      J'ai malgré tout des problèmes avec la libc :
      Dois-je faire un linkage static vers elle? (J'ai vu que cela posait de nombreux problèmes)
      Ou est ce que mon programme devrait pouvoir fonctionner avec une machine ayant une version de la libc différente? (J'ai testé, et ça ne marchait pas, mais peut être ai-je mal fait quelque chose).

  • # compilation statique ou paquet

    Posté par . Évalué à 1.

    Si le nombre de dépendance est réduit, la solution la plus simple est de tout compiler en statique sur la distribution la plus vieille et ça devrait marcher sur les distributions plus récentes. Normalement tu n'est pas obligé d'inclure la libc, car l'API change très rarement. C'est une solution inélégante mais efficace, utilisée par beaucoup de logiciels propriétaires sous Linux.

    Cependant, la solution la plus propre sera toujours de créer un paquet pour chaque distribution et de spécifier les dépendances pour que les bibliothèques soient automatiquement installées.
    Mais ça risque de devenir vite chronophage si tu as un grand nombre de distributions différentes à gérer.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.