Compila o kernel antigo com o novo gcc

0

Estou tentando compilar uma versão mais antiga do Linux (3.4) na minha caixa do Linux com seu atual gcc-6.3. Mas a execução do comando make mostra erros como este:

scripts/kconfig/conf.o: relocation R_X86_64_32 against '.rodata.str1.8' can not be used when making a shared object; recompile with -fPIC

E ainda não encontrei nenhuma solução. Parece que o gcc requer o uso do flag fPIC para alguns objetos que os arquivos de configuração do kernel 3.4 não pediram. De preferência, não quero tocar nos padrões do kernel. Como devo pedir ao gcc para parar de exigir este sinalizador ou desativá-lo?

    
por user2808671 06.04.2018 / 22:16

2 respostas

0

Qualquer erro que eu tenha resolvido um novo apareceu na próxima tentativa de compilação. Infelizmente a melhor solução que encontrei foi usar um gcc mais antigo para compilar este kernel.

    
por 07.04.2018 / 12:39
2

Meu palpite é que você está usando uma versão do gcc que é modificada para produzir PIE (executáveis independentes de posição) por padrão. De acordo com essa página , pelo menos o Ubuntu fez essa mudança. O código no diretório scripts/kconfig é para programas auxiliares que não estão vinculados ao kernel e (afaik) não vincula a bibliotecas estáticas externas. Portanto, não importa qual seja o padrão, a menos que você tenha algumas sobras de uma execução anterior com uma versão do compilador com um padrão diferente. Execute make clean e recompile.

Se isso não ajudar, dê uma olhada no Makefile para o atual kernel, que força -no-pie .

    
por 06.04.2018 / 23:48