Forum général.général Créer un binaire static pour une autre machine ?

Posté par  .
Étiquettes :
0
7
déc.
2005
Hello à toutes et tous,

Je cherche à compiler un fichier binaire incluant les dépendances afin de faire tourner ce binaire sur une ancienne distribution minimale (Cobalt Linux dérivée de Red Hat).

Comme je ne suis pas très calé, on m'a conseillé de faire un ./configure --enable-static. Toutefois, le binaire généré ne fonctionne pas sur la machine de destination, le message d'erreur étant " error while loading shared libraries: cannot open shared object file: cannot load shared object file: No such file or directory".

En effet, la machine sur laquelle je compile tourne sous Ubuntu Breezy i686 avec un kernel 2.6 et la machine de destination est une i586 avec apparemment un kernel 2.4.

Je suis désolé de vous embêter avec ça mais sauriez-vous soit me conseiller, soit m'orienter vers un How-To (même en Anglais) qui pourrait me permettre de me débrouiller ?

Par ailleurs, on m'a aussi indiqué que je pouvais passer des variables (cf. ci-dessous) mais je ne sais pas trop quoi en faire.
LD_ASSUME_KERNEL=2.4
CC=gcc-3.4
export LD_ASSUME_KERNEL, CC

Merci beaucoup de m'avoir lu.

Samuel
  • # libs statiques pour progs statiques

    Posté par  (site web personnel) . Évalué à 3.

    si ton programme dépend d'une librairie A, il faut que tu compile au préalable ta librairie A ainsi que toutes ses sous-librairies en statique (généralement, c'est l'option --enable-static du configure des librairies), ainsi, le --enable-static de ton appli sera pris en compte. mais ce n'est pas tout: un grand nombre de librairies utilise maintenant le principe de dlopen() qui charge des modules si une application en a besoin (c'est le cas de Qt, Gtk+ ...). pour empêcher ce dlopen() et forcer la librairie à être completementt statique, il faut ajouter --disable-modules aux options du configure de ces librairies. malheureusement, cette option n'existe pas pour toutes les librairies. une fois toutes les librairies compilées en statique, vérifie que le Makefile généré par ton configure passe bien l'option -static à gcc pour la compilation de l'appli.

    j'espère ne rien avoir oublié.

    Tout homme qui dirige, qui fait quelque chose, a contre lui ceux qui voudraient faire la même chose, ceux qui font précisément le contraire, et surtout la grande armée des gens d'autant plus sévères qu'ils ne font rien du tout. -- Jules Claretie

    • [^] # Re: libs statiques pour progs statiques

      Posté par  . Évalué à 1.

      Merci pour ta réponse Benoît. Faudra-t'il que j'installe les librairies statiques sur ma machine via le ./configure ; make puis make install ? Ceci ne va-t'il pas corrompre mon système actuel ?

      Merci en tout cas pour tes précisions.
      • [^] # Re: libs statiques pour progs statiques

        Posté par  . Évalué à 2.

        oui tout a fait, il serait souhaitable de voir les dependances de ton binaires avec ldd, puis de te faire une install de tous cela en static sur une autre partition ou dans un chroot.

        dans un premier temps regarde si l'ensemble des dependances peut etre en static.

        tu devrais voir le site de svgalib il explique comment compiler en static des programmes qui utilisent svgalib c'est peut etre interressant
  • # Et avec apgcc ?

    Posté par  . Évalué à 1.

    Tu devrais essayer apgcc ( http://www.autopackage.org/apbuild-apgcc.php ) , qui, je cite: " Apgcc is a wrapper around gcc. It allows you to create more portable executables".

    C'est développé par les p'tits gars d'autopackage ( http://www.autopackage.org/ ) qui ont des problématiques communes aux tiennes ;-)
    • [^] # Re: Et avec apgcc ?

      Posté par  . Évalué à 1.

      C'est visiblement une très bonne idée. Merci pour ce lien. J'ai fait un petit test avec un exe basique et il fonctionne.

      Merci 1000 fois

Suivre le flux des commentaires

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