如何查看程序被哪个版本编译器编译的linux-gcc

时间:2023-02-10 02:12:47
ubuntu下,我有一个执行文件,想知道是哪个版本的
gcc编译出来的,应该怎么做呢?

5 个解决方案

#1


gcc -v

#2


引用楼主 zblovejava 的回复:
ubuntu下,我有一个执行文件,想知道是哪个版本的
gcc编译出来的,应该怎么做呢?
那是不可能的,除非你加入了调试信息,也就是编译的时候加入了-g参数,然后用gdb调试就可以显示。最大程度上查看一个elf文件信息。
如下,省略了很多内容。
$ readelf -Wa /bin/cp
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Intel 80386
  Version:                           0x1
  Entry point address:               0x8049fc0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          117712 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         8
  Size of section headers:           40 (bytes)
  Number of section headers:         32
  Section header string table index: 31

#4


除了readelf
可以部分使用ldd查看依赖的gcc/g++库来判定大数字版本(libgcc改动较少,libstdc++改动较多)
3和4不一样
4.3之前和之后不一样
4.6又改了一次

如果是静态编译的,那没办法了,至少我不知道了
只能从反汇编来推测他的优化情形及采用的异常(对gcc的优化变更要求相当了解)

#5


学习了。。。

#1


gcc -v

#2


引用楼主 zblovejava 的回复:
ubuntu下,我有一个执行文件,想知道是哪个版本的
gcc编译出来的,应该怎么做呢?
那是不可能的,除非你加入了调试信息,也就是编译的时候加入了-g参数,然后用gdb调试就可以显示。最大程度上查看一个elf文件信息。
如下,省略了很多内容。
$ readelf -Wa /bin/cp
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Intel 80386
  Version:                           0x1
  Entry point address:               0x8049fc0
  Start of program headers:          52 (bytes into file)
  Start of section headers:          117712 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         8
  Size of section headers:           40 (bytes)
  Number of section headers:         32
  Section header string table index: 31

#3


#4


除了readelf
可以部分使用ldd查看依赖的gcc/g++库来判定大数字版本(libgcc改动较少,libstdc++改动较多)
3和4不一样
4.3之前和之后不一样
4.6又改了一次

如果是静态编译的,那没办法了,至少我不知道了
只能从反汇编来推测他的优化情形及采用的异常(对gcc的优化变更要求相当了解)

#5


学习了。。。