Linux软件移植configure配置、实战 - 交叉编译binutils演示

Linux软件移植configure配置、实战

早期Unix/Linux的软件开发并没有一套统一的预编译标准,从原始代码到目标程序完全是开发人员一行一行敲键盘出来的,这个过程中的产生的代码bug及人工debug,非常耗时,效率极低。后来,Unix社区的广大程序员群体开发出autoconf、automake、libtool等工具,约定了一套configure规则,方便Unix/Linux软件的传播。GNU组织逐渐将其形成了GNU软件发布通用配置,现今绝大多数遵循该规则的开源软件源码包内都含有configure、INSTALL、install-sh、Makefile这几个脚本文件,少数只含有configure.ac、Makefile.am、Makefile.in的源码包,需要运行autoconf等工具生成configure、Makefile等脚本后,才可进行configure预编译配置。

configure的目的,是让使用人员根据需求来定制目标软件,Unix/Linux软件的灵活性就充分体现出来了。软件的功能特性(Optional features)、子项目组件(Optional packages),在预编译阶段指定enable/disable-FEATURE(使能、禁用)、with/without-PACKAGE(包含、不包含)等参数,通过configure脚本生成Makefile,最后进入make正式编译阶段。

下面通过实战项目来体会Unix/Linux开源软件的定制、编译。开始前,我们先来搭建好编译环境:

编译环境:

        宿主机系统:Windows 7 x64 + VM VirtualBOX-6.0.18 + Ubuntu 16.04 LTS x32

        编译器GCC:gcc (Ubuntu 5.4.0-6ubuntu1~16.04.12) 5.4.0 20160609  (native-compile)

                              mips-unknown-linux-uclibc-gcc (Buildroot 2011.11) 4.6.2 (cross-compile)

        更改系统shell:dash 更改为 bash

sudo dpkg-reconfigure dash

实战项目:binutils源码编译

      一、同构编译native-compile

       1、下载源码并解压:http://mirrors.ustc.edu.cn/gnu/binutils/binutils-2.21.1.tar.bz2 (中国科技大学开源镜像站)             

cd ~
mkdir -p src/build && cd src
wget http://mirrors.ustc.edu.cn/gnu/binutils/binutils-2.21.1.tar.bz2
tar -xf binutils-2.21.1.tar.bz2
cd build/

       2、安装依赖库

sudo apt-get install build-essential bison flex m4 texinfo libgmp-dev libmpc-dev libmpfr-dev ppl-dev libppl-dev cloog-ppl libcloog-ppl-dev

       3、configure配置

# 链接库方式:dynamically linked
../binutils-2.21.1/configure --disable-werror --prefix=/usr LDFLAGS="-s"
# 链接库方式:statically linked
../binutils-2.21.1/configure --disable-werror --prefix=/usr LDFLAGS="--static -s"

       说明:小型GNU开源软件可以在源码目录内直接配置、编译,中、大型GNU开源软件不要在源码目录内配置、编译,尤其是GCC工具链编译,这个Note在GCC构建说明文档中特别提及。
       4、编译、安装

make && make install DESTDIR=`pwd`/123-i386

       说明:编译完成生成的目标程序,默认工作目录就是“--prefix=/usr”指定的/usr,本实例中指定安装到DESTDIR=`pwd`/123-i386,方便进行二进制binary程序打包。

      二、交叉编译cross-compile

      1、清理目录(如果直接cross-compile,可略过此步)

make distclean

      说明:如果直接cross-compile,务必安装必要的依赖库。

      2、设置交叉编译环境变量

export PATH=/opt/toolchains/crosstools-mips-gcc-4.6-linux-3.4-uclibc-0.9.32-binutils-2.21/usr/bin:$PATH

      说明:这里的PATH指定了你的cross-gcc工具链路径,优先于系统原PATH

      3、configure配置

# 链接库方式:dynamically linked
../binutils-2.21.1/configure --host=mips-unknown-linux-uclibc --disable-werror --prefix=/usr LDFLAGS="-s"
# 链接库方式:statically linked
../binutils-2.21.1/configure --host=mips-unknown-linux-uclibc --disable-werror --prefix=/usr LDFLAGS="--static -s"

      说明:参数--host=mips-unknown-linux-uclibc让配置configure识别cross-gcc,实现交叉编译。

      4、编译、安装

make && make install DESTDIR=`pwd`/123-mips

后记:交叉编译有时候要引用额外的库,此时您需要指定库的路径(-Ipath、-Lpath,独立引用,不会污染cross-gcc工具链),本文暂不讨论。

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值