一步一步制作yaffs/yaffs2根文件系统(三)---使用glibc库构造 /lib

本文介绍如何为嵌入式系统构建glibc库并安装到根文件系统中,包括解压glibc库、创建lib文件夹以及复制必要的动态库文件。

在我们制作交叉编译工具链arm-linux-gcc时,已经生成了glibc库,可以直接使用它来构建根文件系统,本文使用的时光盘里自带的压缩库,由下图可以看出,这是arm-linux-gcc3.4.5版本的glibc库,而我的arm-linux-gcc是4.4.3的,可不可以使用呢?答案是可以的!(补充,其实不可以的,所用的动态链接库必须和你PC机的交叉编译工具的动态链接库,所以我这里必须要用arm-linux-gcc的动态库。但是,我并没有修改这个错误,而是将错就错,所以建议你什么都不要变,还是按照这篇文章的步骤做下去,我本系列最后一个文章是针对出现的这个错误纠错的,相信你一结合,会明白不少的!

15、将下载的arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 放在和rootfs同一个文件夹,如下


16、执行命令:tar -jxf arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2 解压此库


我们需要的glibc库的位置存放在gcc-3.4.5-glibc-2.3.6/arm-linux/lib 文件夹下。

执行命令:ls gcc-3.4.5-glibc-2.3.6/arm-linux/lib 可以看到该目录下的文件。其实这个目录下的文件并非都属于glibc库,比如crt1.o、libstdc++.a等文件是gcc工具本身生成的。里面的目录、文件可以分为8类。

    ①  加载器ld-2.3.6.so、ld-linux.so.2。

    动态程序启动前,它们都被用来加载动态库。

    ②  目标文件(.o)。

    比如crt1.o、crti.o、crtn.o、Mctr1.o、Scrt1.o等,在生成应用程序时,这些文件像一般的目标文件一样被链接。

    ③  静态库文件(.a)。

    比如静态数学库libm.a、静态c++库libstdc++.a等,编译静态程序时会连接它们

    ④  动态库文件(.so、,so.[0-9]*)。

    比如动态数学库libm.so、动态c++库libstdc++.so等,它们可能是一个链接文件。编译动态库时会用到这些文件,但是不会连接它们,运行时才连接。

    ⑤  libtool库文件(.la)。

    在连接库文件时,这些文件会被用到,比如它们列出了当前库文件所依赖的其他库文件。程序运行时无需这些文件。

    ⑥  gconv目录。

    里面是有头字符的集的动态库,比如ISO8859-1.so、GB18010.so等。

    ⑦  ldscripts目录。

   里面是各种连接脚本,在编译应用程序时,它们被用于制定程序的运行地址、各段的位置等。

    ⑧  其他目录及文件。

17、现在安装glibc库,在上一节我们编译安装busybox时使用的是动态连接,这里在开发板上只需要加载器和动态库。

执行命令:mkdir -p rootfs/lib  在rootfs中创建lib文件夹,用来存放咱们的加载器和动态库

执行命令:cp gcc-3.4.5-glibc-2.3.6/arm-linux/lib/*.so* rootfs/lib/  安装glibc库到咱们的文件夹下


18、执行命令:cd rootfs  进入到rootfs文件夹,此时可以看到在lib文件夹已经有咱们需要的库了。


至此,glibc库已经安装完成,也已经在根文件目录下创建了/lib目录。其实,上面复制的库文件不是每个文件都会被用到,可以根据应用程序对库的依赖关系保留需要用到的。通过ldd命令可以查看一个应用程序会用到哪些库。

根据提供的文件信息,我们可以深入解析“arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2交叉编译器.zip”这一名称中蕴含的关键知识点。 首先,“arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2”部分涉及到几个重要的概念: 1. **ARM架构**:ARM是一种处理器架构,广泛应用于嵌入式系统中。ARM处理器以其低功耗、高效能的特点,成为移动设备和嵌入式设备首选的处理器之一。 2. **Linux内核**:Linux是一个开源的操作系统内核,被广泛用于服务器、桌面以及嵌入式设备中。这里提到的“linux”指的就是Linux操作系统内核。 3. **GCC(GNU Compiler Collection)**:GCC是GNU编译器集合的缩写,支持多种编程语言(如C、C++、Objective-C、Fortran、Ada等)的编译。GCC是开源社区的基石之一,它允许开发者使用自由软件编译自己的程序。在这个文件名中,特指GCC版本为3.4.5。 4. **glibc(GNU C Library)**:glibc是GNU计划提供的C,主要用于Linux系统,提供了程序开发时常用的API接口。glibc包括C标准以及POSIX线程等。这里提到的glibc版本是2.3.6。 结合以上信息,文件名“arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2”指向的是一个为ARM架构的Linux系统准备的交叉编译器。该编译器包括GCC 3.4.5版本编译器以及glibc 2.3.6版本的C。 5. **交叉编译器**:交叉编译器是一种编译器,它可以在一种架构的系统上生成另一种架构的机器代码。例如,你可以在x86架构的PC上使用交叉编译器生成ARM架构的代码。交叉编译器在嵌入式系统开发中非常关键,因为它允许开发者在较为强大的主机上编写和编译针对资源有限的目标硬件(如嵌入式设备)的代码。 6. **压缩包格式**:文件名中的“.tar.bz2”表示该文件是一个使用bzip2算法压缩的tar归档文件。tar是一种将多个文件打包成一个文件的工具,而bzip2是一种高压缩比的压缩算法。 7. **文件扩展名.zip**:通常用于表示ZIP格式的压缩文件。不过,在这个文件名中,“.zip”可能是一个错误或笔误,因为它与前面的.tar.bz2格式不匹配。可能的真实格式是.tar.bz2,因为ZIP通常不与.tar一起使用。 现在,我们来详细讨论标签“linux gcc 3.4.5 linux 2.3.6 交叉编译”中所包含的知识点: - **Linux**:在这里指的是Linux操作系统及其内核。 - **GCC 3.4.5**:指的是GCC编译器的3.4.5版本。 - **Linux 2.3.6**:应该是对glibc 2.3.6的引用,因为通常我们不会单独说“Linux 2.3.6”。 - **交叉编译**:是上述交叉编译器的用途描述。 从文件名“交叉编译器”中,可以提炼的知识点较少,因为它是对上述编译器的一个泛指。 总的来说,文件“arm-linux-gcc-3.4.5-glibc-2.3.6.tar.bz2交叉编译器.zip”是一个针对ARM架构的Linux系统的交叉编译器,包括特定版本的GCC编译器和glibc。开发者可以利用它在主机系统(如x86 PC)上为ARM架构的嵌入式设备编写、编译和优化代码。这种交叉编译器是嵌入式系统和移动设备开发过程中不可或缺的工具,它使得软件开发更加高效、便捷,且能适应不同的硬件平台。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值