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

如何查看程序被哪个版本编译器编译的linux-gcc http://bbs.csdn.net/topics/380000949

那是不可能的,除非你加入了调试信息,也就是编译的时候加入了-g参数,然后用gdb调试就可以显示。最大程度上查看一个elf文件信息。
如下:

[[email protected] rootfs]#  readelf -Wa bin/gzip

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:                           ARM
  Version:                           0x1
  Entry point address:               0xa080
  Start of program headers:          52 (bytes into file)
  Start of section headers:          1975444 (bytes into file)
  Flags:                             0x5000002, has entry point, Version5 EABI
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         6
  Size of section headers:           40 (bytes)
  Number of section headers:         25
  Section header string table index: 24

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .note.ABI-tag     NOTE            000080f4 0000f4 000020 00   A  0   0  4
  [ 2] .init             PROGBITS        00008114 000114 00000c 00  AX  0   0  4
  [ 3] .text             PROGBITS        00008120 000120 17fcfc 00  AX  0   0 16
  [ 4] __libc_freeres_fn PROGBITS        00187e1c 17fe1c 000f20 00  AX  0   0  4
  [ 5] __libc_thread_fre PROGBITS        00188d3c 180d3c 0000e4 00  AX  0   0  4
  [ 6] .fini             PROGBITS        00188e20 180e20 000008 00  AX  0   0  4
  [ 7] .rodata           PROGBITS        00188e28 180e28 058147 00   A  0   0  8
  [ 8] __libc_subfreeres PROGBITS        001e0f70 1d8f70 00005c 00   A  0   0  4
  [ 9] __libc_atexit     PROGBITS        001e0fcc 1d8fcc 000004 00   A  0   0  4
  [10] __libc_thread_sub PROGBITS        001e0fd0 1d8fd0 000008 00   A  0   0  4
  [11] .ARM.extab        PROGBITS        001e0fd8 1d8fd8 001b04 00   A  0   0  4
  [12] .ARM.exidx        ARM_EXIDX       001e2adc 1daadc 006ea8 00  AL  3   0  4
  [13] .tdata            PROGBITS        001f1984 1e1984 000018 00 WAT  0   0  4
  [14] .tbss             NOBITS          001f199c 1e199c 000034 00 WAT  0   0  4
  [15] .init_array       INIT_ARRAY      001f199c 1e199c 000004 00  WA  0   0  4
  [16] .fini_array       FINI_ARRAY      001f19a0 1e19a0 000008 00  WA  0   0  4
  [17] .jcr              PROGBITS        001f19a8 1e19a8 000004 00  WA  0   0  4
  [18] .data.rel.ro      PROGBITS        001f19ac 1e19ac 00002c 00  WA  0   0  4
  [19] .got              PROGBITS        001f19d8 1e19d8 00007c 04  WA  0   0  4
  [20] .data             PROGBITS        001f1a58 1e1a58 0008f7 00  WA  0   0  8
  [21] .bss              NOBITS          001f2350 1e234f 004828 00  WA  0   0  8
  [22] __libc_freeres_pt NOBITS          001f6b78 1e234f 00003c 00  WA  0   0  4
  [23] .ARM.attributes   ARM_ATTRIBUTES  00000000 1e234f 00002b 00      0   0  1
  [24] .shstrtab         STRTAB          00000000 1e237a 000118 00      0   0  1

 Section to Segment mapping:
  Segment Sections...
   00     .ARM.exidx
   01     .note.ABI-tag .init .text __libc_freeres_fn __libc_thread_freeres_fn .fini .rodata __libc_subfreeres __libc_atexit __libc_thread_subfreeres .ARM.extab .ARM.exidx
   02     .tdata .init_array .fini_array .jcr .data.rel.ro .got .data .bss __libc_freeres_ptrs
   03     .note.ABI-tag
   04     .tdata .tbss

Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "5TE"
  Tag_CPU_arch: v5TE
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-1
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align8_needed: Yes
  Tag_ABI_align8_preserved: Yes, except leaf SP
  Tag_ABI_enum_size: int
  Tag_unknown_44: 1 (0x1)

How to retrieve the GCC version used to compile a given ELF executable? http://stackoverflow.com/questions/2387040/how-to-retrieve-the-gcc-version-used-to-compile-a-given-elf-executable

  QUES: I‘d like to retrieve the GCC version used to compile a given executable. I tried readelf but didn‘t get the information. Any thoughts?

  ANS: To complete what others have said: it‘s not stored in the object (or exe) file, unless you compile with debugging information! (option -g). If you compile with debug info, you can get it back with readelf:  

[[email protected] test]# gcc a.c
[[email protected] test]# readelf -wi a.out
[[email protected] test]# gcc a.c -g
[[email protected] test]# readelf -wi a.out
The section .debug_info contains:

  Compilation Unit @ offset 0x0:
   Length:        135
   Version:       2
   Abbrev Offset: 0
   Pointer Size:  8
 <0><b>: Abbrev Number: 1 (DW_TAG_compile_unit)
     DW_AT_stmt_list   : 0
     DW_AT_high_pc     : 0x400453
     DW_AT_low_pc      : 0x400448
     DW_AT_producer    : GNU C 4.1.2 20080704 (Red Hat 4.1.2-55)
     DW_AT_language    : 1      (ANSI C)
     DW_AT_name        : a.c
     DW_AT_comp_dir    : /work/farsight/test
 <1><61>: Abbrev Number: 2 (DW_TAG_subprogram)
     DW_AT_external    : 1
     DW_AT_name        : main
     DW_AT_decl_file   : 1
     DW_AT_decl_line   : 4
     DW_AT_prototyped  : 1
     DW_AT_type        : <83>
     DW_AT_low_pc      : 0x400448
     DW_AT_high_pc     : 0x400453
     DW_AT_frame_base  : 0      (location list)
 <1><83>: Abbrev Number: 3 (DW_TAG_base_type)
     DW_AT_name        : int
     DW_AT_byte_size   : 4
     DW_AT_encoding    : 5      (signed)

  ANS2:

时间: 2024-11-03 22:05:30

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

使用CodeBlocks编译64位程序(用的编译器仅仅是windows sdk的)

需求: -CodeBlocks使用nightly版本: -Windows SDK(我使用的是6.0A,即微软针对vista的,因为这个比较小,你也可以选择其他版本但是要有64位编译器.他也适用于xpsp2及以上但是要安装.net2.0以上才能运行)对应的链接 :http://download.microsoft.com/download/4/2/6/42684501-9ec5-43dd-9dfe-c8c9dfa6a66f/6.1.6000.16384.10.WindowsSDK_Vista_Fe

Linux下用Intel编译器编译安装NetCDF-Fortan库(4.2版本后)

本来这个问题真的没必要写的,可是真的困扰我太久%>_<%,决定还是记录一下. 首先,最权威清晰的安装文档还是官方的: Building the NetCDF-4.2 and later Fortran libraries (写此文时,最近版为4.2) 那这个文档最开始就告诉我们,自NetCDF库4.2版本以后,Fortran的库和C的库就要分开build啦!而且要装Fortran的库必须先装好C的库. 所以先装C的库咯:仍然官方文档: Getting and Building NetCDF-C

编译Ngnix遇到的问题,查看程序依赖的库文件

要点:ldd 可以读取每个可以运行的程序依赖的 so 文件. 编译的时候提示需要Openssl库. 查看本机,已经安装了openssl 查看编译报错文件,查找Openssl所依赖的库 more objs/autoconf.err 查看openssl所依赖的库文件 ldd /usr/bin/openssl ldd –u /usr/bin/openssl objdump -x obj 以某种分类信息的形式把目标文件的数据组织(被分为几大块)输出 objdump -t obj 输出目标文件的符号表 o

C++环境搭建与atom编译器编译C++

Windows下安装 方法一--VS: 使用windows开发神器visio studio.这种方法比较简单,直接下载一个最新的vs安装就行.不单单是C++,C.C#.VB等都可以开发. 方法二--只安装C++编译器: 最常用的免费可用的编译器是 GNU 的 C/C++ 编译器,为了在 Windows 上安装 GCC,您需要安装 MinGW. 1.首先去MinGW主页下载最新版本的MinGW: www.mingw.org.直接点击网站右上方的Download Installer. 2.运行Min

C++开发新版本vs使用旧版本vs编译的静态库动态库

关于vs潜在的升级问题概述 (Visual C++)查看官网的介绍:潜在的升级问题概述 (Visual C++).主要问题: 1. 如果使用 /GL(全程序优化)进行编译,则生成的对象文件只能使用生成它时所用的同一工具集进行链接.即若在编译静态库时开启了全程序优化,那么编译出的静态库不可移植. 2. 在 Visual Studio 2013 及更低版本中,不能保证使用不同编译器工具集和运行时库版本生成的对象文件 (OBJ).静态库 (LIB).动态库 (DLL) 和可执行文件 (EXE) 之间的

linux程序包管理 rpm yum 编译

rpm命令:rpm  [OPTIONS]  [PACKAGE_FILE] 安装:-i, --install 升级:-U, --update, -F, --freshen 卸载:-e, --erase 查询:-q, --query 校验:-V, --verify 数据库维护:--builddb, --initdb 安装:rpm {-i|--install} [install-options] PACKAGE_FILE ... rpm  -ivh  PACKAGE_FILE ... GENERAL

gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解

摘自http://blog.csdn.net/elfprincexu/article/details/45043971 gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解 C和C++编译器是集成的,编译一般分为四个步骤: 预处理(preprocessing)  ----------------- cpp/ gcc -E  编译(compilation) ------------------ cc1 / gcc -S 汇编(assembly)  ----------------

ORB-SLAM(单目版本)编译与运行

ORB-SLAM的GitHub主页:https://github.com/raulmur/ORB_SLAM虽然整体上已经说得很清楚了,但是有些细节不够详细,运行的时候不注意很容易出错,因此对整个编译与运行过程进行详细的介绍: 安装环境:Ubuntu14.04+ROS indigo 准备工作: 1.源代码下载: 可以在GitHub主页下载到本地:或者执行命令:git clone https://github.com/raulmur/ORB_SLAM.git ORB_SLAM 2.测试数据集下载并解

【C程序编译链接】gcc使用命令介绍

1.gcc或者g++安装rpm -qa|grep gcc ==>检查gcc是否安装gcc -v ==>检查gcc版本 编译器会在可执行文件中植入一些信息,可执行文件会变大.一般开发时候使用 -g ,编译一个 "release 版本" 时不使用 -g 编译. gcc如果是最新的则不重新编译链接. cc -c main.c 等同于cc -c main.c -o main.o 等同于 cc -c -o main.o main.c IDE:codeblocks中运行C语言程序 参考