概述
本文主要介绍在Ubuntu环境中如何交叉编译OSS-C-SDK。
详细信息
概念介绍
交叉编译:在一个平台上生成可以在另外一个平台上运行的可执行文件,比如在Linux下生成能够在Windows下运行的可执行文件也称为交叉编译,本示例主要是指在Linux下生成能够在ARM开发环境下运行的可执行文件,对应的还有一个概念就是非交叉编译(普通编译),即生成能够在编译平台上运行的可执行文件。
安装前的准备
下载arm-linux-gcc交叉编译器。
OSS-C-SDK下载链接,请参见前言。
在Apache官网下载apr和apr-util源码。
curl官网下载curl源码。
从SourceForge官网下载2.9.1版本的mxml源码。
在官网下载expat源码。
开始安装
安装arm-linux-gcc
登录服务器,执行如下命令,创建
/usr/local/arm_4.4.3
目录。mkdir /usr/local/arm_4.4.3
执行如下命令,解压交叉编译器。
tar zvxf arm-linux-gcc-4.4.3.tar.gz
执行如下命令,将编译器下所有文件拷贝到
/usr/local/arm_4.4.3
目录下。mv opt/FriendlyARM/toolschain/4.4.3/* /usr/local/arm_4.4.3
编辑环境变量,在
/etc/profile
文件尾部添加如下内容。export PATH=$PATH:/usr/local/arm_4.4.3/bin/
执行如下命令,加载新的环境变量设置。
source /etc/profile
执行如下命令,查看arm-linux-gcc是否安装成功。
arm-linux-gcc -V
系统显示类似如下。
安装curl库
解压文件之后,执行如下命令,配置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
目录下。执行如下命令,编译curl库。
make make install make clean
安装apr库
执行如下命令,配置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结构体的定义如下所示。
执行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
依次执行如下命令,生成当前平台运行的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
修改当前目录下的MakeFile,禁止自动生成gen_test_char。
依次执行如下命令,重新进行编辑安装。
make make install make clean
安装expat库
直接安装apr-util库会出现以下错误。因为缺少XML的解析器,所以需要先安装expat。
xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory#include <expat.h>
依次执行如下命令,解压expat包。
bzip2 -d expat-2.2.5.tar.bz2 tar vxf expat-2.2.5.tar
执行如下命令,进入指定目录。
cd expat-2.2.5/
执行如下命令,配置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库
执行如下命令,解压libmxml包。
tar zvxf libmxml-0.9.1.tar.gz
执行如下命令,进入指定目录。
cd libmxml-0.9.1/
执行如下命令,创建libmxml目录。
mkdir /root/libmxml
执行如下命令,安装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
执行如下命令,解压oss-c-sdk安装包。
tar zvxf aliyun-oss-c-sdk-3.5.0.tar.gz
执行如下命令,进入指定目录。
cd aliyun-oss-c-sdk-3.5.0
编辑CMakeList.txt文件,在文件开头添加交叉编译器的寻找位置。
更改apr-1和apr-util配置的检索路径。
分别进入oss_c_sdk_test和oss_c_sdk_sample,修改下面的CMakeList.txt文件。
执行如下命令,进行安装。
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
说明注:该命令中执行了上面截图中几个第三方库的交叉编译安装路径,同时系统库路径需要引用交叉编译器的系统库路径。
依次执行如下命令,进行编译。
make make install make clean
适用于
对象存储OSS