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)
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
Vous pouvez récupérer une version précompilée avec static-get
static-get -x coreutils