一鳄炉,準(zhǔn)備工作?
由于最近在做的Gis行業(yè)的項目涉及到安卓客戶端研發(fā)的需要囱淋,所以需要把geos_3.6.3庫編譯成安卓平臺Arm64_v8a版本的.so庫嗜闻。由于要求是Android NDK版本 12以上斩芭,Android API 21以上的支持乏冀。所以在本次編譯過程中全部需要使用64位的操作系統(tǒng)蝶糯,NDK及編譯器,編譯環(huán)境為 操作系統(tǒng):Ubuntu 16.04 LTS辆沦,安卓NDK版本:android-ndk-r14b,gdal版本:geos_3.6.3昼捍。
二识虚,編譯環(huán)境搭建?
1、安裝 g++妒茬,swig担锤, ant和openjdk
在終端命令行里面依次輸入以下命令安裝相應(yīng)的工具。
sudo apt-get update
sudo apt-get install g++
sudo apt-get install swig
sudo apt-get install ant
sudo apt-get install openjdk-8-jdk
2乍钻、NDK環(huán)境搭建
將下載好的NDK解壓到某個路徑下肛循,并配置環(huán)境變量。本文通過修改/etc/profile文件來進行配置团赁。
通過以下命令打開配置文件
sudo gedit /etc/profile
NDK_HOME末尾添加環(huán)境變量(具體的路徑根據(jù)自己的NDK存放路徑自行調(diào)整):
export NDK_HOME = /home/myubuntu/Software/android-ndk-r14b
export PATH = $NDK_HOME:$PATH
執(zhí)行下面的命令讓環(huán)境變量立即生效
source /etc/profile
測試環(huán)境變量命令
ndk-build -v
如果NDK的版本信息如下,就說明是配置正確:
GNU Make 3.81
Copyright (C) 2006? Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
This program built for x86_64-pc-linux-gnu
3谨履、交叉編譯的環(huán)境搭建
3.1欢摄,
? ? 進入并切到 /home/myubuntu/SoftWare/android-ndk-r14b/build/tools 目錄。
執(zhí)行如下命令
./make-standalone-toolchain.sh --platform=android-21 --install-dir=$/home/ubuntu/androidtoolchains/android-arrch64 --arch=arm64
--platform=android-21 指定Android 平臺21以上笋粟,--install-dir= 后面接指定的生成路徑怀挠,也就是說生成工具鏈存放路徑。--arch=arm64 指定工具鏈為arm64害捕,
生成的為arm64-v8a版本的庫绿淋。如果你想生成32位版本的工具鏈可以指定為arm,編譯的動態(tài)庫就為armeabi-v7a版本。
3.2尝盼, 配置交叉編譯的環(huán)境變量
export TOOLCHAIN_HOME=/home/ubuntu/toolchains_android/android-arrch64
export PATH=$TOOLCHAIN_HOME/bin:$PATH
export LIBS="-lstdc++ -liconv -lgnustl_shared"
TOOLCHAIN_HOME 后接生成的工具鏈路徑吞滞。
執(zhí)行source /etc/profile命令讓設(shè)置生效。
三盾沫,交叉編譯
1裁赠、執(zhí)行.configure命令
進入geos的解壓路徑下,打開Terminal赴精,執(zhí)行如下命令:
LIBS="-lsupc++ -lstdc++" ./configure --host=aarch64-linux-android --prefix=/home/ubuntu/WorkSpace/geos --enable-shared=yes
注意:LIBS="-lsupc++ -lstdc++"必須加上佩捞,否則遇到STL等常用庫會報錯導(dǎo)致編譯不過,--host后接aarch64-linux-android表示調(diào)用交叉編譯工具鏈的android 64位的編譯器進行編譯,
? ? --prefix后接生成的相應(yīng)文件路徑并且必須生成到新建非當(dāng)前文件路徑下蕾哟,在此一忱,本人將相應(yīng)的文件生成在了/home/ubuntu/WorkSpace/geos下。
執(zhí)行后谭确,一定要在終端打印的內(nèi)容中看到checking whether we are cross compiling... yes帘营,才算成功。
2逐哈、進行編譯并安裝仪吧。
make
make install
3、生成arm64-v8a庫