Отключить PIE и PIC по умолчанию в gcc на ubuntu 17.04?

Я только с трудом обнаружил, что gcc по-видимому генерирует -fpic-код по умолчанию и ссылки по -fPIE по умолчанию (On ubuntu 17.04). Это полностью замалчивает тысячи тестов, которые я запускаю со сценариями и make-файлами, используемыми множеством разных дистрибутивов linux. Есть ли какой-либо глобальный или для пользователя способ отключить эти значения по умолчанию и сделать компилятор обратно совместимым с поведением, которое он имел в течение десятилетий? Я не заинтересован в отслеживании каждой компиляции в тысячах скриптов, которые знают, что значение по умолчанию не является -fpic и т. Д. Возможно, переменная среды или два?

3
задан 3 May 2017 в 21:25

2 ответа

У меня была такая же проблема, и я просто решил ее благодаря этому сообщению в 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
0
ответ дан 18 July 2018 в 13:52

У меня была такая же проблема, и я просто решил ее благодаря этому сообщению в 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
0
ответ дан 24 July 2018 в 20:16
  • 1
    Можете ли вы включить шаги в свой ответ в случае, если связь будет нарушена в будущем. – sempaiscuba 20 July 2017 в 14:22
  • 2
    Изменение существующих 47 000 строк тестовых скриптов и make-файлов, которые знают, что им не нужна опция не связывать исполняемый файл PIE и не нужна опция для компиляции с ПОС, не является жизнеспособным решением. Не могли бы мы получить альтернативный пакет драйверов gcc со старым поведением? И использовать механизм альтернатив, чтобы решить, какой из них должен быть по умолчанию? – user1160711 25 August 2017 в 17:42

Другие вопросы по тегам:

Похожие вопросы: