como fazer um binário estático de coreutils?

5

Eu estou tentando fazer um binário estático de rm, então eu tentei compilar o coreutils com

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

mas continuo correndo em erros.

Primeiro faça reclamações sobre c99 ou gnu99, resolvi adicionando -std = gnu99 ao valor CC:

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

Depois disso, diz:

/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

Eu tentei adicionar -fPIC como eu adicionei a opção -std mas sem sucesso.

É possível fazer binários estáticos de coreutils? (apenas interessado em rm) Se sim, como? (Eu tenho 0 experiência com a construção de binários linux)

PS: Eu baixei a fonte coreutils do site do Ubuntu, trusty. (coreutils-8.21)

    
por Nicolas Mommaerts 30.09.2014 / 16:54

2 respostas

7

Por comentário no bug # 640734 , há uma solução alternativa que você pode tentar:

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

Além disso, adicione -fPIC ao comando acima:

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

Quando terminar a compilação, restaure o arquivo original assim:

$ cd /usr/lib/gcc/x86_64-linux-gnu/4.8
$ sudo cp crtbeginT.orig.o crtbeginT.o
$ sudo rm crtbeginT.orig.o
    
por Sylvain Pineau 30.09.2014 / 18:04
3

Você pode recuperar uma versão pré-compilada com static-get

static-get -x coreutils
    
por Javier López 23.06.2015 / 16:41