How to know the gcc version used to build the linux?

MOHAMED picture MOHAMED · Apr 16, 2013 · Viewed 8.1k times · Source

I use OpenWRT. it's a linux distribution for embedded systems

I want to know the gcc version used to compile the linux

I made some researchs in the net but without results.

I tried to execute these commands for some existing binary in the linux OpenWRT (like wget)

strings -a <default binary> | grep "GCC"
strings -a <default binary> | grep "gcc"

But I did not get any result

even the

strings -a  /lib/libgcc_s.so.1 | grep  "gcc"
strings -a /lib/libuClibc-0.9.30.1.so | grep   "gcc"

does not give any result

Are there a way to know used gcc to build the whole linux (For both user space and kernel space)?

Answer

Dietrich Epp picture Dietrich Epp · Apr 16, 2013

For programs, it appears in the .comment section of ELF executables, if your system is using ELF.

$ cat main.c
int main() { }
$ gcc main.c
$ objdump -s -j .comment a.out

a.out:     file format elf64-x86-64

Contents of section .comment:
 0000 00474343 3a202844 65626961 6e20342e  .GCC: (Debian 4.
 0010 372e322d 35292034 2e372e32 00474343  7.2-5) 4.7.2.GCC
 0020 3a202844 65626961 6e20342e 342e372d  : (Debian 4.4.7-
 0030 33292034 2e342e37 00                 3) 4.4.7.       

The compiler used to compile the kernel is available from the string in /proc/version, for example:

$ cat /proc/version
Linux version 3.8.5 (...) (gcc version 4.7.2 (Debian 4.7.2-5) ) ...

A major caveat

The .comment section is optional. Many distributions will strip it from the executable when the executable is bundled into a package. The section will be placed in a separate debug package.

For example, on my system:

$ objdump -s -j .comment /usr/lib/x86_64-linux-gnu/libcurl.so.4.2.0
/usr/lib/x86_64-linux-gnu/libcurl.so.4.2.0:     file format elf64-x86-64

objdump: section '.comment' mentioned in a -j option, but not found in any input
file

After installing the libcurl3-dbg package, we get an image with the stripped sections by following the GNU debug link:

$ objdump -s -j .comment  \
    /usr/lib/debug/.build-id/8c/4ae0ad17a4e76bab47c487047490061bd49de3.debug

/usr/lib/debug/.build-id/8c/4ae0ad17a4e76bab47c487047490061bd49de3.debug:
    file format elf64-x86-64

Contents of section .comment:
 0000 4743433a 20284465 6269616e 20342e37  GCC: (Debian 4.7
 0010 2e322d35 2920342e 372e3200           .2-5) 4.7.2.