8

我使用 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(对于用户空间和内核空间)?

4

2 回答 2

13

对于程序,如果您的系统正在使用 ELF,它会出现在.commentELF 可执行文件部分。

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

a.out:文件格式elf64-x86-64

.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,例如:

$ 猫 /proc/版本
Linux 版本 3.8.5 (...) (gcc 版本 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:文件格式elf64-x86-64

objdump:-j 选项中提到的“.comment”部分,但在任何输入中都找不到
文件

安装libcurl3-dbg软件包后,我们通过 GNU 调试链接获得带有剥离部分的图像:

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

/usr/lib/debug/.build-id/8c/4ae0ad17a4e76bab47c487047490061bd49de3.debug:
    文件格式 elf64-x86-64

.comment 部分的内容:
 0000 4743433a 20284465 6269616e 20342e37 GCC:(Debian 4.7
 0010 2e322d35 2920342e 372e3200 .2-5) 4.7.2。    
于 2013-04-16T09:40:27.097 回答
1

为了构建 OpenWRT 工作区,您使用了主 gcc:

gcc --version

对于交叉编译,所有需要的工具都位于您的 openwrt 构建目录下。

编译时使用的 gcc 可以在staging directoryOpenWRT 中找到。转到您的 openwrt 主目录并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
于 2015-06-17T09:58:23.737 回答