busybox静态编译及动态编译实践

本文介绍了BusyBox的用途,详细讲解了在Linux环境下如何进行BusyBox的静态和动态编译,包括编译过程中的问题解决,以及动态编译时所需的动态链接库分析。
摘要由CSDN通过智能技术生成

1. 简介

   BusyBox 是一个集成了一百多个最常用linux命令和工具的软件。BusyBox 包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。

  简单的说BusyBox就好像是个大工具箱,它集成压缩了Linux的许多工具和命令。除此之外,提供了良好的编程框架,用户能够将自己的命令集成到busybox当中。在实际的使用过程中,busybox常常被用于制作linux的根文件系统。


2. 静态编译

下载busybox源码,进行配置编译

    curl http://busybox.net/downloads/busybox-1.23.2.tar.bz2 | tar xjf -
    mkdir -p obj/busybox
    cd busybox-1.23.2
    make O=../obj/busybox defconfig #独立在新文件中进行相关配置
    cd ../obj/busybox
    make menuconfig

  修改配置,使用静态编译,如果不使用静态编译,程序运行期间需要进行动态加载,则需在根文件系统中提供其所需的共享库。

Location:                                                           
-> Busybox Settings                                        
   -> Build Options     
      [*] Build BusyBox as a static binary (no shared libs)         

使用make进行编译,对于一些机器,可能会报如下的错误:

networking/lib.a(inetd.o): In function `unregister_rpc':
inetd.c:(.text.unregister_rpc+0x17): undefined reference to `pmap_unset'
networking/lib.a(inetd.o): In function `register_rpc':
inetd.c:(.text.register_rpc+0x56): undefined reference to `pmap_unset'
inetd.c:(.text.register_rpc+0x72): undefined reference to `pmap_set'
networking/lib.a(inetd.o): In function `prepare_socket_fd':
inetd.c:(.text.prepare_socket_fd+0x7f): undefined reference to `bindresvport'
collect2: ld returned 1 exit status
make[2]: *** [busybox_unstripped] Error 1
make[1]: *** [_all] Error 2
make: *** [all] Error 2

  观察上面的错误,可以发现问题出在inetd.c中有未定义的引用,在网上搜索一下答案,关闭配置当中的inet选项即可忽略该问题

    Location:                 
    -> Networking Utilities 
       [ ] inetd  

  这时再执行make,就能生成busybox,执行make install生成_install目录,该目录中生成了常用的linux命令,这些命令均是符号链接到busybox上的。


3. 动态编译

  网上大部分人都讲述的如何静态编译,而少部分人的讲述并未考虑到不同平台带来的问题,而我使用的平台为x86_64架构上,作为第一次探索动态编译,在这个过程当中遇到不少困难,希望下面的过程,能够对你有用。

接下来,我们会使用到以下几个命令:

  • readel
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值