支持STL的Android NDK中的獨立toolchain製作方法 原

問題:在使用NDK移植流媒體SDK至Android平臺下時,由於在自己的工程下,不能使用Android.mk與Application.mk,直接指定android-ndk-r8b下的交叉編譯工具進行編譯,結果提示找不到STL相關頭文件等一大堆錯誤,從網上下載了其他版本的NDK工具鏈也不行,把STL頭文件絕對路徑加上以及加入了所有STL相關編譯選項後還是不能編譯通過。後來仔細閱讀官網資料,得到一個信息——Android NDK提供了腳本來剝離出單獨的toolchain,腳本的名字叫make-standalone-toolchain.sh,其製作出來的工具鏈不依賴NDK下的環境變量,且支持STL,運用製作出的工具鏈編譯工程代碼,問題得到解決,下邊將其製作的具體步驟。

             

1. 下載Android NDK

http://developer.android.com/sdk/ndk/index.html

我用的是android-ndk-r8b-linux-x86.tar.bz2

wget http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86.bin

 

2. 提取toolchain

以參考文檔docs/STANDALONE-TOOLCHAIN.html

在linux系統中解壓NDK,假設解壓到/opt;

# cd /opt/android-ndk-r8b/

# build/tools/make-standalone-toolchain.sh --platform=android-14

 

# cd android-ndk-r10e

#./build/tools/make-standalone-toolchain.sh --platform=android-14

--toolchain=arm-linux-androideabi-4.9

 

expr: warning: unportable BRE: `^\\([^\\-].*\\)$': using `^' as the first character

of the basic regular expression is not portable; it is being ignored

expr: warning: unportable BRE: `^\\(--[^=]*\\)=.*$': using `^' as the first character

of the basic regular expression is not portable; it is being ignored

expr: warning: unportable BRE: `^--[^=]*=\\(.*\\)$': using `^' as the first character

of the basic regular expression is not portable; it is being ignored

Auto-config: --toolchain=arm-linux-androideabi-4.6

Copying prebuilt binaries...

Copying sysroot headers and libraries...

Copying libstdc++ headers and libraries...

Creating package file: /tmp/ndk-caiwang213/arm-linux-androideabi-4.6.tar.bz2

Cleaning up...

Done.

 

有一些警告沒有關係,最終得到的是一個壓縮包/tmp/ndk-caiwang213/

arm-linux-androideabi-4.6.tar.bz2

 

 

3. 安裝arm-linux-androideabi-4.6.tar.bz2工具鏈

# tar jxvf arm-linux-androideabi-4.6.tar.bz2 -C /usr/local

 

4. 將工具鏈環境變量加入到/etc/profile文件中

# vi /etc/profile

  在最下邊加入一行export PATH=$PATH:/usr/local/standalone-

toolchain-androideabi-4.6/bin

# source /etc/profile

 

5. Makefile變量設定

CROSS_COMPILER = arm-linux-androideabi-

CFLAGS += -O2 -static

STANDALONE_PATH=/usr/local/standalone-toolchain-androideabi-4.6

INCLUDES += -I$(STANDALONE_PATH)/arm-linux-androideabi/include/c++/4.6/

INCLUDES += -I$(STANDALONE_PATH)/arm-linux-androideabi/include/c++/4.6/arm-linux-androideabi

 

6.make編譯工程,提示

  /usr/local/standalone-toolchain-androideabi-4.6/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/as: /usr/lib/libz.so.1: no version information available (required by /usr/local/standalone-toolchain-androideabi-4.6/bin/../lib/gcc/arm-linux-androideabi/4.6.x-google/../../../../arm-linux-androideabi/bin/as)

  但編譯可以通過,編譯出來的庫可以在Android下調用成功

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章