Какой компилятор скомпилировал этот файл?
Я использую gnu gcc и armcc для компиляции нескольких C-файлов. Как я могу получить информацию о том, какой компилятор скомпилировал какой файл?
Пример: test.cpp компилируется armcc или gnu gcc.
Makefile очень сложен, и я ищу команду, с помощью которой я могу проверить, какой компилятор скомпилировал какой файл.
Есть идеи?
3 ответа
Иногда вы можете посмотреть на файл с помощью шестнадцатеричного редактора и сказать, записал ли компилятор свое имя в файл.
Я не уверен, что есть более простой способ, но вы можете найти его встроенным в двоичный файл с помощью gcc (по крайней мере, на моей платформе):
$ hexdump -C foo | grep -A2 GCC
00001030 00 00 00 00 00 00 00 00 47 43 43 3a 20 28 55 62 |........GCC: (Ub|
00001040 75 6e 74 75 2f 4c 69 6e 61 72 6f 20 34 2e 37 2e |untu/Linaro 4.7.|
00001050 32 2d 32 32 75 62 75 6e 74 75 33 29 20 34 2e 37 |2-22ubuntu3) 4.7|
Некоторые компиляторы встраивают имя и версию компилятора в библиотеку, но не все. Мы также можем встраивать любую информацию, которую мы хотим, в двоичный файл.
gcc -DCOMPILER_DETAILS='"gcc 4.3.3"' temp.c
В temp.c
использовать макрос COMPILER_DETAILS
в любом месте, как просто использовать его в printf
, Так что этот строковый литерал будет встроен в сгенерированный двоичный файл. Не присваивайте эту строку неиспользуемой переменной, компилятор не будет встраиваться из-за оптимизации.