我使用OpenWRT。它是嵌入式系统的Linux发行版
我想知道用于编译linux的gcc版本
我在网上做了一些研究但没有结果。
我试图对linux OpenWRT中的一些现有二进制文件执行这些命令(如wget)
strings -a <default binary> | grep "GCC"
strings -a <default binary> | grep "gcc"
但我没有得到任何结果
即使是
strings -a /lib/libgcc_s.so.1 | grep "gcc"
strings -a /lib/libuClibc-0.9.30.1.so | grep "gcc"
没有给出任何结果
有没有办法知道使用gcc构建整个linux(用户空间和内核空间)?
答案 0 :(得分:13)
对于程序,如果您的系统使用ELF,它将显示在ELF可执行文件的.comment
部分中。
$ 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.
用于编译内核的编译器可以从/proc/version
中的字符串获得,例如:
$ cat /proc/version Linux version 3.8.5 (...) (gcc version 4.7.2 (Debian 4.7.2-5) ) ...
.comment
部分是可选的。当可执行文件捆绑到包中时,许多发行版将从可执行文件中删除它。该部分将放在一个单独的调试包中。
例如,在我的系统上:
$ 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
安装libcurl3-dbg
软件包后,我们按照GNU调试链接获取带有剥离部分的图像:
$ 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.
答案 1 :(得分:1)
为了构建OpenWRT工作区,使用了主要的gcc:
gcc --version
对于交叉编译,所有需要的工具都位于openwrt build dir。
之下编译期间使用的gcc可以在OpenWRT的staging directory
中找到。转到openwrt主目录并在staging目录下查找toolchain
目录。在这里,您将找到一个bin
目录,其中包含所有交叉编译工具。
例如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