Desabilita os padrões PIE e PIC no gcc no Ubuntu 17.04?

3

Acabei de descobrir dolorosamente que o gcc aparentemente gera código -fpic por padrão e links com -fPIE por padrão (no Ubuntu 17.04). Isso estraga completamente milhares de testes que eu rodei com scripts e makefiles usados por várias distribuições Linux diferentes. Existe alguma maneira global ou por usuário para desativar esses padrões e tornar o compilador compatível com o comportamento que ele tem há décadas? Eu não estou interessado em rastrear cada compilação em milhares de scripts que sabem que o padrão não é -fpic, etc. Uma variável de ambiente ou dois, talvez?

    
por user1160711 03.05.2017 / 20:25

1 resposta

1

Eu tive o mesmo problema e resolvi o problema graças a este post no Stack Overflow .

Você deve adicionar a opção -no-pie à linha de comando de compilação

sem:

$ gcc main.c -o main
$ file main 
main:ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32,
BuildID[sha1]=46ada4e5e25fc120ca052c9beb8bfa5491fc6239, not stripped

com:

$ gcc main.c -o main -no-pie
$ file main
main: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32,
BuildID[sha1]=17f860c6c84fc1a5771c8744b7aaaf164c219559, not stripped
    
por titux 20.07.2017 / 12:01