web-dev-qa-db-fra.com

comment faire un binaire statique de coreutils?

J'essaie de faire un binaire statique de rm, alors j'ai essayé de compiler coreutils avec

configure; make SHARED=0 CC='gcc -static'; make install

mais je continue à courir dans les erreurs.

Tout d’abord, make se plaint de c99 ou de gnu99, j’ai résolu le problème en ajoutant -std = gnu99 à la valeur CC:

make SHARED=0 CC='gcc -static -std=gnu99'

Après ça dit:

/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/4.8/crtbeginT.o: relocation R_X86_64_32 against `__TMC_END__' can not be used when making a shared object; recompile with -fPIC
/usr/lib/gcc/x86_64-linux-gnu/4.8/crtbeginT.o: error adding symbols: Bad value

J'ai essayé d'ajouter -fPIC comme si j'avais ajouté l'option -std mais en vain.

Est-il même possible de faire des binaires statiques de coreutils? (intéressé seulement par rm) Si oui, comment? (J'ai 0 expérience dans la construction de binaires Linux)

PS: J'ai téléchargé la source de coreutils sur le site ubuntu, fidèle. (Coreutils-8.21)

5
Nicolas Mommaerts

Par ce commentaire sur le bogue n ° 640734 , il existe une solution de contournement que vous pouvez essayer:

$ cd /usr/lib/gcc/x86_64-linux-gnu/4.8
$ Sudo cp crtbeginT.o crtbeginT.orig.o
$ Sudo cp crtbeginS.o crtbeginT.o

Ajoutez également -fPIC à la commande ci-dessus:

make SHARED=0 CFLAGS='-static -std=gnu99 -static-libgcc -static-libstdc++ -fPIC'

Une fois que vous avez terminé la compilation, restaurez le fichier original comme ceci:

$ cd /usr/lib/gcc/x86_64-linux-gnu/4.8
$ Sudo cp crtbeginT.orig.o crtbeginT.o
$ Sudo rm crtbeginT.orig.o
7
Sylvain Pineau

Vous pouvez récupérer une version précompilée avec static-get

static-get -x coreutils
3
Javier López