2017-02-21 33 views
4

Я понял, что файл> = 5.30 или gcc> = 6.3 изменили его поведение. Когда я компилирую базовую программу, такую ​​как hello-world, вывод файла указывает, что исполняемый файл elf включает какой-то «debug_info».Почему файловая команда заявляет, что исполняемый файл содержит «debug_info»

Источник:

#include <iostream> 
using namespace std; 

int main(int argc, char* argv []) { 
     cout << "Hello world.\n"; 
     return 0; 
} 

Compile:

$ g++ -o hello hello.cpp # notice, no option "-g" 

Осмотреть:

$ file hello # please scroll to the right hand-side, it is at the very end 
hello: 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]=d03b68ed8618fcb97094b18157054f7cc2030f3c, not stripped, with debug_info 

Я не знаком с readelf. A readelf -S hello | grep -i debug указывает, что нет отладочной информации при компиляции без «-g». Если скомпилирован с опцией «-g», я вижу это, что выглядит хорошо для меня:

[27] .debug_aranges PROGBITS   0000000000000000 0000107c 
    [28] .debug_info  PROGBITS   0000000000000000 000010ac 
    [29] .debug_abbrev  PROGBITS   0000000000000000 000038ce 
    [30] .debug_line  PROGBITS   0000000000000000 00003e54 
    [31] .debug_str  PROGBITS   0000000000000000 00004186 

Я предполагаю, что никто не использовал скрытый Configure-флаг во время сборки моего освобождения НКУ, всегда включают в себя какой-то отладочной информации. Поэтому, вероятно, изменилось поведение утилиты файл. Что делает файл означает «debug info»?


Я использую GNU/Linux (Archlinux) на X86_64, все обновления обновлены.

+0

Дружественное примечание: «все пакеты обновлены». не означает, что компилятор или какие-либо намеки на версию компилятора. Распространение могло бы прекратить обновление GCC в 3.3.4 для всех, что мы знаем. Это было бы экстремально, но более чем несколько крупных дистрибутивов, похоже, остановились на 4.8 и 4.9. Лучше всего запускать 'g ++ -v' и добавлять версию к будущим вопросам там, где это необходимо. – user4581301

+0

Вы правы, но я добавил версию-info уже в верхней части вопроса. В примечании в конце следует просто предоставить контекстуальную информацию. – Peter

ответ

6

Это bug, и это fixed. Значение по умолчанию было 1 (что означает «истина»), а фиксированный изменил его на 0 (что означает «ложь»).