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)?
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 .
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.
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.
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) ) ...
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.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With