2013-03-14 59 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。所以这个字符串文字将被嵌入到生成的二进制文件中。不要将此字符串分配给未使用的变量,因为优化,编译器不会嵌入。