在Ubuntu环境中交叉编译OSS-C-SDK

概述

本文主要介绍在Ubuntu环境中如何交叉编译OSS-C-SDK。

详细信息

概念介绍

交叉编译:在一个平台上生成可以在另外一个平台上运行的可执行文件,比如在Linux下生成能够在Windows下运行的可执行文件也称为交叉编译,本示例主要是指在Linux下生成能够在ARM开发环境下运行的可执行文件,对应的还有一个概念就是非交叉编译(普通编译),即生成能够在编译平台上运行的可执行文件。

安装前的准备

  1. 下载arm-linux-gcc交叉编译器。

  2. OSS-C-SDK下载链接,请参见前言

  3. 在Apache官网下载apr和apr-util源码。

  4. curl官网下载curl源码。

  5. 从SourceForge官网下载2.9.1版本的mxml源码。

  6. 在官网下载expat源码。

开始安装

安装arm-linux-gcc

  1. 登录服务器,执行如下命令,创建/usr/local/arm_4.4.3目录。

    mkdir /usr/local/arm_4.4.3

  2. 执行如下命令,解压交叉编译器。

    tar zvxf arm-linux-gcc-4.4.3.tar.gz

  3. 执行如下命令,将编译器下所有文件拷贝到/usr/local/arm_4.4.3目录下。

    mv opt/FriendlyARM/toolschain/4.4.3/*  /usr/local/arm_4.4.3

  4. 编辑环境变量,在/etc/profile文件尾部添加如下内容。

    export PATH=$PATH:/usr/local/arm_4.4.3/bin/

  5. 执行如下命令,加载新的环境变量设置。

    source /etc/profile

  6. 执行如下命令,查看arm-linux-gcc是否安装成功。

    arm-linux-gcc -V

    系统显示类似如下。

安装curl库

  1. 解压文件之后,执行如下命令,配置curl库。

    ./configure --prefix=/root/curl --host=arm-none-linux CC=/usr/local/arm_4.4.3/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm_4.4.3/bin/arm-none-linux-gnueabi-g++
    说明

    注:curl库安装在/root/curl目录下。

  2. 执行如下命令,编译curl库。

    make 
    make install
    make clean

安装apr库

  1. 执行如下命令,配置apr库。

    ./configure --prefix=/root/apr-1/ --host=arm-none-linux CC=/usr/local/arm_4.4.3/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm_4.4.3/bin/arm-none-linux-gnueabi-g++  ac_cv_file__dev_zero=yes ac_cv_func_setpgrp_void=yes apr_cv_process_shared_works=yes apr_cv_mutex_robust_shared=yes apr_cv_tcp_nodelay_with_cork=yes ap_void_ptr_lt_long=no
    说明

    注:安装在/root/apr-1目录下。

    安装过程中如显示如下错误,则注释iovec结构体的定义。

    ./include/apr_want.h:94:8: error: redefinition of ‘struct iovec’

    注释iovec结构体的定义如下所示。

  2. 执行make命令,进行编译,如显示以下错误,则继续执行以下操作。如没有报错,则执行make install命令。

    encoding/apr_escape.c:79:33: error: ‘test_char_table’ undeclared
    tools/gen_test_char > include/private/apr_escape_test_char.h
    /bin/bash: tools/gen_test_char: cannot execute binary file: Exec format error

  3. 依次执行如下命令,生成当前平台运行的gen_test_char。

    gcc -Wall -O2 -DCROSS_COMPILE tools/gen_test_char.c -s -o gen_test_char
    ./gen_test_char > include/private/apr_escape_test_char.h

  4. 修改当前目录下的MakeFile,禁止自动生成gen_test_char。

  5. 依次执行如下命令,重新进行编辑安装。

    make
    make install
    make clean

安装expat库

  1. 直接安装apr-util库会出现以下错误。因为缺少XML的解析器,所以需要先安装expat。

    xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory#include <expat.h>

  2. 依次执行如下命令,解压expat包。

    bzip2 -d expat-2.2.5.tar.bz2
    tar vxf expat-2.2.5.tar

  3. 执行如下命令,进入指定目录。

    cd expat-2.2.5/

  4. 执行如下命令,配置expat库。

    ./configure --prefix=/root/expat --host=arm-none-linux CC=/usr/local/arm_4.4.3/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm_4.4.3/bin/arm-none-linux-gnueabi-g++
    说明

    注:将expat安装在/root/expat目录下。

安装apr-util库

安装好之后,执行如下命令,配置apr-util库。

./configure --prefix=/root/apr-util --host=arm-none-linux CC=/usr/local/arm_4.4.3/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm_4.4.3/bin/arm-none-linux-gnueabi-g++ --with-apr=/root/apr-1 --with-expat=/root/expat

安装libmxml库

  1. 执行如下命令,解压libmxml包。

    tar zvxf libmxml-0.9.1.tar.gz

  2. 执行如下命令,进入指定目录。

    cd libmxml-0.9.1/

  3. 执行如下命令,创建libmxml目录。

    mkdir /root/libmxml

  4. 执行如下命令,安装libmxml。

    ./configure --prefix=/root/libmxml --host=arm-none-linux CC=/usr/local/arm_4.4.3/bin/arm-none-linux-gnueabi-gcc CXX=/usr/local/arm_4.4.3/bin/arm-none-linux-gnueabi-g++

安装oss-c-sdk

  1. 执行如下命令,解压oss-c-sdk安装包。

    tar zvxf aliyun-oss-c-sdk-3.5.0.tar.gz

  2. 执行如下命令,进入指定目录。

    cd aliyun-oss-c-sdk-3.5.0

  3. 编辑CMakeList.txt文件,在文件开头添加交叉编译器的寻找位置。

  4. 更改apr-1和apr-util配置的检索路径。

  5. 分别进入oss_c_sdk_test和oss_c_sdk_sample,修改下面的CMakeList.txt文件。

  6. 执行如下命令,进行安装。

    cmake . -DCMAKE_INSTALL_PREFIX=/root/oss_c_sdk -DCURL_INCLUDE_DIR=/root/curl/include/ -DCURL_LIBRARY=/root/curl/lib/libcurl.a -DAPR_INCLUDE_DIR=/root/apr-1/include/apr-1/ -DAPR_LIBRARY=/root/apr-1/lib/libapr-1.a -DAPR_UTIL_INCLUDE_DIR=/root/apr-util/include/apr-1 -DAPR_UTIL_LIBRARY=/root/apr-util/lib/libaprutil-1.a -DMINIXML_INCLUDE_DIR=/root/libmxml/include/ -DMINIXML_LIBRARY=/root/libmxml/lib/libmxml.a -DPTHREAD_LIBRARY=/usr/local/arm_4.4.3/arm-none-linux-gnueabi/sys-root/usr/lib/libpthread.a -DMATH_LIBRARY=/usr/local/arm_4.4.3/arm-none-linux-gnueabi/sys-root/usr/lib/libm.a -DRT_LIBRARY=/usr/local/arm_4.4.3/arm-none-linux-gnueabi/sys-root/usr/lib/librt.a
    说明

    注:该命令中执行了上面截图中几个第三方库的交叉编译安装路径,同时系统库路径需要引用交叉编译器的系统库路径。

  7. 依次执行如下命令,进行编译。

    make
    make install
    make clean

适用于

  • 对象存储OSS