2013-03-14 85 views
3

我使用gnu gcc和armcc來編譯幾個C文件。我如何獲得有關哪個編譯器編譯哪個文件的信息?哪個編譯器編譯這個文件?

例如:test.cpp正在由armcc或gnu gcc編譯。

該生成文件是非常複雜的,我正在尋找一個命令,我可以檢查哪個編譯器編譯哪個文件。

任何想法?

+0

你有權訪問不確定的目標文件嗎? – 2013-03-14 19:10:04

+0

也許目標文件格式可能會給你一些線索 – paulm 2013-03-14 19:13:52

+0

是的,我有權訪問.o文件 – aditya3524 2013-03-14 19:14:28

回答

2

有時,您可以使用十六進制編輯器查看該文件,並確定編譯器是否將其名稱寫入該文件。

+0

是。作品!謝謝! – aditya3524 2013-03-14 19:20:17

2

我不知道是否有一個更簡單的方法,但你可以找到它嵌入在與海灣合作委員會(至少在我的平臺)二進制:

$ 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| 
+0

這不適用於這裏用gcc編譯的可執行文件(或.o文件)(OS X上的gcc)。這似乎與平臺有關。 – 2013-03-14 19:20:26

+0

@RandyHoward:好的,謝謝。 – teppic 2013-03-14 19:22:51

+0

@蘭迪霍華德 - 雖然實際上這可能是因爲它在幕後鏗鏘作響? – teppic 2013-03-14 19:24:58

0

一些編譯器使嵌入編譯器的名稱和版本中二進制,但不是全部。我們還可以將所需的任何信息嵌入到二進制文件中。

gcc -DCOMPILER_DETAILS='"gcc 4.3.3"' temp.c 

temp.c使用在任何地方宏觀COMPILER_DETAILS,就像剛用它printf。所以這個字符串文字將被嵌入到生成的二進制文件中。不要將此字符串分配給未使用的變量,因爲優化,編譯器不會嵌入。