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

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

更新时间:2018-10-22 10:37:31

概述

本文主要介绍在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
    
  1. 执行如下命令,查看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