Я только с трудом обнаружил, что gcc по-видимому генерирует -fpic-код по умолчанию и ссылки по -fPIE по умолчанию (On ubuntu 17.04). Это полностью замалчивает тысячи тестов, которые я запускаю со сценариями и make-файлами, используемыми множеством разных дистрибутивов linux. Есть ли какой-либо глобальный или для пользователя способ отключить эти значения по умолчанию и сделать компилятор обратно совместимым с поведением, которое он имел в течение десятилетий? Я не заинтересован в отслеживании каждой компиляции в тысячах скриптов, которые знают, что значение по умолчанию не является -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
У меня была такая же проблема, и я просто решил ее благодаря этому сообщению в 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