Como posso obter um compilador C estático?


8

Estou brincando com ambientes chroot e gostaria de ter um compilador C portátil para poder configurar facilmente algumas ferramentas básicas de construção em cada ambiente sem precisar mover muitas bibliotecas.

O Gcc parece bastante inchado pelo que eu quero fazer, mas se for razoavelmente fácil criar um gcc estático, não me importaria com algumas dezenas de megabytes.

Também estou olhando para o Tiny C Compiler, que é menor, mas ainda parece ter um conjunto impressionante de recursos. No entanto, a execução de ./configure --help no diretório de origem não lista nenhuma opção para criar o tcc estaticamente, e não tenho certeza de como isso poderia ser feito.


Para responder à sua preocupação secundária, uso de memória, aqui estão algumas soluções: Você pode criar diretórios-sombra que contêm apenas links físicos para o GCC; É possível usar contêineres do docker (os contêineres são mais seguros que o chroot, e o docker fornece um sistema de arquivos da união, que permitirá economizar memória).
Ctrl-alt-delor

Respostas:


1

Construir um binário estático deve ser tão simples quanto executar o gcc com -static, ou se ld estiver sendo chamado diretamente, use -Bstatic. Tentar

CFLAGS=-static make

depois de correr configure. Se falhar, os resultados serão óbvios, por exemplo, várias referências indefinidas no tempo do link.


1
Eu tentei make CFLAGS=-staticagora. Faça impressões sobre algum aviso e dlopen, quando tento executar o executável no ambiente chroot, /usr/lib/crt1.o .. crti,o .. crtn.onão encontro erros. É isso que você quis dizer com "referências indefinidas no tempo do link"?
Math4tots

Os erros que eu esperava seriam devido à falta de versões estáticas das bibliotecas, como crt1.o, mas o vinculador reclamaria imediatamente. Se você estiver vendo os erros em tempo de execução, o binário não está estático.
Kyle Jones

Acho que você não entendeu a pergunta: math4tots quer um compilador C que funcione como um binário independente (ou pelo menos como um conjunto de arquivos facilmente identificável) e não um compilador C que produz binários independentes.
Gilles 'SO- stop be evil'

1
Sim eu entendo isso. Produzir um compilador estático é um primeiro passo necessário e que a pergunta parece estar se perguntando.
Kyle Jones

1
@Gilles A melhor maneira de obter um compilador C como um binário independente é construí-lo a partir da fonte usando um complier que você já possui.
OrangeDog

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.