全部產品
Search
文件中心

Object Storage Service:在Ubuntu環境中交叉編譯OSS-C-SDK

更新時間:Feb 28, 2024

概述

本文主要介紹在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

適用於

  • Object Storage Service