我使用gnu gcc和armcc來編譯幾個C文件。我如何獲得有關哪個編譯器編譯哪個文件的信息?哪個編譯器編譯這個文件?
例如:test.cpp正在由armcc或gnu gcc編譯。
該生成文件是非常複雜的,我正在尋找一個命令,我可以檢查哪個編譯器編譯哪個文件。
任何想法?
我使用gnu gcc和armcc來編譯幾個C文件。我如何獲得有關哪個編譯器編譯哪個文件的信息?哪個編譯器編譯這個文件?
例如:test.cpp正在由armcc或gnu 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
。所以這個字符串文字將被嵌入到生成的二進制文件中。不要將此字符串分配給未使用的變量,因爲優化,編譯器不會嵌入。
你有權訪問不確定的目標文件嗎? – 2013-03-14 19:10:04
也許目標文件格式可能會給你一些線索 – paulm 2013-03-14 19:13:52
是的,我有權訪問.o文件 – aditya3524 2013-03-14 19:14:28