在ubuntu 17.04上禁用gcc中的PIE和PIC默认值?

我刚刚痛苦地发现gcc默认会生成-fpic代码,默认情况下会链接-fPIE(在ubuntu 17.04上)。 这完全搞砸了我用许多不同的Linux发行版使用的脚本和makefile运行的数千个测试。 是否有任何全局或每用户方式关闭这些默认值并使编译器向后兼容几十年来的行为? 我对跟踪数千个知道默认不是-fpic等的脚本中的每个编译都不感兴趣。或许是一个或两个环境变量?

我有同样的问题,刚刚解决了它,感谢Stack Overflow上的这篇文章 。

您应该在编译命令行中添加-no-pie选项

无:

 $ 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 

有:

 $ 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