Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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)?

like image 503
MOHAMED Avatar asked Apr 16 '13 09:04

MOHAMED


People also ask

How do I find gcc version so?

Use objdump and add --section to specify section name. For example, if your compiled a program named foo in the source dir, you can run the following commands to get GCC's version info: $ objdump -s --section . comment foo sizeof: file format elf32-i386 Contents of section .

How do I know if gcc compiler is installed on Linux?

In the Command Prompt window type “gcc” and hit enter. If the output says something like “gcc: fatal error: no input files”, that is good, and you pass the test.

What is Linux gcc version?

GCC is a core component of the GNU toolchain. Various open-source projects are compiled using the GCC, such as Linux kernel and GNU tools. It is distributed under the GPL (General Public License). The first version, GCC 1.0, was released in 1987.


2 Answers

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.    
like image 61
Dietrich Epp Avatar answered Oct 14 '22 23:10

Dietrich Epp


For building the OpenWRT workspace your main gcc is used:

gcc --version

For cross compile all the needed tools are located under you openwrt build dir.

The gcc used during the compile can be found in the staging directory of OpenWRT. Go to you openwrt home directory and look for the toolchain directory under the staging dir. Here you will find a bin directory, where all the cross-compile tools are located. For example for ar71xx:

$ ./staging_dir/toolchain-mips_r2_gcc-4.6-linaro_uClibc-0.9.33.2/bin/mips-openwrt-linux-gcc --version
mips-openwrt-linux-gcc (OpenWrt/Linaro GCC 4.6-2013.05 r57678) 4.6.4
like image 28
molnarg Avatar answered Oct 15 '22 00:10

molnarg