我使用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