Ubuntu – Disable PIE and PIC defaults in gcc on ubuntu 17.04

gcc

I have just been painfully discovering that gcc apparently generates -fpic code by default and links with -fPIE by default (On ubuntu 17.04). This completely screws up thousands of tests I run with scripts and makefiles used by lots of different linux distros. Is there any global or per-user way to turn off these defaults and make the compiler backward compatible with the behavior it has had for decades? I'm not interested in tracking down every compilation in thousands of scripts that knows the default is not -fpic, etc. An environment variable or two perhaps?

Best Answer

  • I had the same problem and just solved it thanks to this post on Stack Overflow.

    You should add -no-pie option to compilation command line

    without:

    $ 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

    with:

    $ 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
  • Related Question