使用android ndk編譯boost庫

來源:互聯網
上載者:User

由於以往我寫過不少使用boost庫開發的項目,而最近準備移植一些代碼到android上(上層介面以及jni層我不管,也沒研究過,現在只完成代碼的移植編譯,具體如何調用,由其它人負責),所以先要解決的就是boost庫本身的移植問題。

在google上找了一些相關的資料,然後在http://stackoverflow.com上找到一個給力的文章:

http://stackoverflow.com/questions/14036311/official-boost-library-support-for-android-and-ios/14089965#comment19511559_14089965

文章裡面大致介紹了怎麼裝,這裡面涉及到一個老外寫的指令碼工具,用於編譯

移植過程相對比較順利,不過一開始下載的ndk r8d,好像是對glibc的版本有要求,在我這邊的centos5.6上編譯它內建的sample時,arm-linux-androideabi-ld提示/usr/lib/libstdc++中的glibc版本過低,無法執行連結,可能arm-linux-androideabi-ld依賴高版本的庫,有時間更新一下再看看,oh my god!不過我沒去管它,因此系統裡還有ndk r8,下面就說一下編譯過程。

1.下載安裝ndk

我用的r8,放置在 /usr/local/src/android-ndk-r8

註冊環境變數(第一句必須執行):

export NDK_ROOT=/usr/local/src/android-ndk-r8

export PATH=$NDK_ROOT:$PATH

2.下載boost-for-android工具

git clone git://github.com/madadam/Boost-for-Android.git

它裡麵包含了boost的補丁以及編譯指令碼,該工具放置在 /usr/local/src/Boost-for-Android

3.下載boost_1.49.0

上述工具目前只支援到為1.49打補丁,另外boost-for-android的指令碼本身帶有下載boost壓縮包的功能,但是天朝的速度。。。你懂的,還是自己用下載工具下比較快

將下載完的boost_1.49.0.tar.bz放置在/usr/local/src/Boost-for-Android

4.開始編譯

切換目錄至/usr/local/src/Boost-for-Android

運行:

./build-android.sh --boost=1.49.0 $NDK_ROOT

如果不出意外將會編譯成功,其它編譯選項可以自行查看

產生的檔案位於 /usr/local/src/Boost-for-Android/build

5.測試demo

我從boost的sample中抽了一個出來進行編譯測試(./boost_1_49_0/libs/asio/example/allocation/server.cpp)

在任意位置建立 jni 檔案夾,放入server.cpp,並建立Android.mk,編寫內容如下:

LOCAL_PATH := $(call my-dir)BOOST_VERSION      := 1_49PROJECT_ROOT       := $(LOCAL_PATH)BOOST_INCLUDE_PATH := /usr/local/src/Boost-for-Android/build/include/boost-1_49BOOST_LIB_PATH     := /usr/local/src/Boost-for-Android/build/lib# Path and name of the STL library. Add this to the *end* of LOCAL_LDLIBS.# Note this is a hack/workaround to prevent linker errors when compiling with # boost. STL_LIBS := -L$(NDK_ROOT)/sources/cxx-stl/gnu-libstdc++/libs/armeabi \                    -lgnustl_staticinclude $(CLEAR_VARS)LOCAL_MODULE    := boost_testLOCAL_C_INCLUDES:= $(BOOST_INCLUDE_PATH) \                   $(PROJECT_ROOT)LOCAL_SRC_FILES := server.cppLOCAL_LDLIBS    := -llog# The order of these libraries is often important.LOCAL_LDLIBS += -L$(BOOST_LIB_PATH)     \                -lboost_system-gcc-mt-$(BOOST_VERSION)  \                -lboost_thread-gcc-mt-$(BOOST_VERSION)                 # $(STL_LIBS)include $(BUILD_EXECUTABLE)

再建立Application.mk內容如下:

APP_STL := gnustl_staticAPP_CPPFLAGS += -frtti -fexceptions

完成後執行 ndk-build

此時你應該已經編譯成功,祝賀

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.