概述
本文主要介紹在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
適用於
Object Storage Service