用NDK編譯開源項目

用NDK編譯開源庫的目的是得到.so文件,讓JNI調用。編譯的方法主要有兩種:

1、書寫Android.mk文件,使用ndk-build來編譯。這種方法,關鍵在於書寫Android.mk,對於工程複雜,目錄複雜的源碼,寫Android.mk太費力,所以這種方法,很少用。

2、直接用NDK的GCC環境,利用開源庫自己的configure / Makefile去編譯。這個和一般的交叉編譯沒太多區別。


這裏簡單記錄一下第二種方法。假設是在ubuntu環境,NDK的環境變量配置如下(在/etc/profile文件末尾添加):

export NDKROOT="/home/xxx/android-ndk-r8"
export PATH=$PATH:$NDKROOT

使用NDK的GCC編譯開源項目:

(1)新建一個目錄 install_dir(下面configure的--prefix選項會用到),用於存放編譯後的頭文件和庫文件等。

xxx@ubuntu:~$ mkdir install_dir

(2)在終端設置NDK的GCC路徑如下

xxx@ubuntu:~$ export SYSROOT=$NDKROOT/platforms/android-14/arch-arm
xxx@ubuntu:~$ export CC="$NDKROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-gcc --sysroot=$SYSROOT"

(3)配置

進入開源項目根目錄,執行configure

xxx@ubuntu:~/libupnp$ ./configure --host=arm --prefix=/home/xxx/install_dir/

或者用 --prefix 和 --exec-prefix 選項分別指定安裝的頭文件和庫文件的位置,如下:

xxx@ubuntu:~/libupnp$ ./configure --host=arm --prefix=/home/xxx/install_dir/include/ --exec-prefix=/home/xxx/install_dir/lib/

注意:--host選項必須指定,否則configure會報錯。

(4)編譯和安裝

xxx@ubuntu:~/libupnp$ make
xxx@ubuntu:~/libupnp$ make install

完成後,在configure的--prefix指定的install_dir文件夾中可以找到編譯後得到的頭文件和庫文件。

(5)使用

若要使用編譯出來的庫,將install_dir中的頭文件和庫文件拷貝到自己的項目中,然後編寫相應的Android.mk即可

關於如何調用第三方靜態庫動態庫等的Android.mk的寫法,可以參考android開發 NDK編譯和使用靜態庫、動態庫



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