LoginSignup
0
0

More than 3 years have passed since last update.

ceres-solver を android ndk でビルドする備忘録

Last updated at Posted at 2020-12-30

概要

android ndk で ceres-solver をビルドし、liceres.a が欲しかった。
それをアプリケーションにnative build する際にリンクさせる必要があった。

ceres-solver バージョン確認

ceres-solver は様々なバージョンがあり、1.12, 1.13, 1.14, 2.0 系などがある。
それらをgithubのリリースから取得。

ndk バージョン確認

ndk download と検索し、ndk(現在は22系が正式サポートされていた)
の必要なバージョンをダウンロードする。(前のバージョンはunsupported versionみたいなところから取得できる。現在は10e系が一番古いものとしてアーカイブに残っていた。)

ceres-solver のバージョンと ndkのバージョンを確認

試した感じでは、

ceres 1.12 系は、ndk 10系あたりだとビルドできた。
ceres 1.14 系は、ndk 14系あたりだとビルドできた。
ceres 2 系は、 ndk 21系あたりでビルドできた。

使うアンドロイドデバイスのプロセッサーを確認

たとえば自分のデバイスは arm64-v8a が必要、など。

依存関係であるEigenをインストール

インストールしておく。

ビルド時のプロセッサーを指定

上で確認した自身のつかうABIを、
ceres-solver の jni の中にある Application.mk ファイルの最後の、
APP_ABIにて指定する。

これをやっておかないと、そもそも所望のABI用のビルドが行われないので、
それの結果をandroid studio から読ませようとすると、
file wrong format 的なエラーが出る。

ndk-build を使ってビルド

ceres-solver のjniフォルダに入ったあと、

EIGEN_PATH=/usr/local/include/eigen3 ~/Downloads/android-n
dk-r10e/ndk-build

などのコマンド 
第一引数はeigenへのパス、
第二引数はndkフォルダの中のndk-build へのパス

を書き、実行する。

これを実行することにより、
objフォルダ内にABI名のフォルダが作られ、
その中にビルドされたlibceres.aバイナリが作られているはず。

ceres-solver-2.0.0

mkdir build && cd build

cmake -DCMAKE_TOOL_CHAIN_FILE=~/pathto/android-ndk-r18b/build/cmake/android.toolchain.cmake -DANDROID_ABI="arm64-v8a" -DANDROID_STL=c++_static  -DCMAKE_BUILD_TYPE=Release -DANDROID_NATIVE_API_LEVEL=android-24 -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DBUILD_JAVA=OFF -DBUILD_ANDROID_EXAMPLES=OFF -DWITH_CUDA=OFF  -DENABLE_PRECOMPILED_HEADERS=OFF ..

static が欲しい

DBUILD_SHARED_LIBS=OFF
をcmake のフラッグとして追加。

最終備忘

Application.mk

APP_BUILD_SCRIPT := $(call my-dir)/Android.mk
APP_PROJECT_PATH := $(call my-dir)

APP_CPPFLAGS += -fno-exceptions
#APP_CPPFLAGS += -fno-rtti
APP_OPTIM := release

APP_CPPFLAGS += -frtti
# Use libc++ from LLVM. It is a modern BSD licensed implementation of
# the standard C++ library.
APP_STL := c++_static
APP_ABI := arm64-v8a

そして assert_ndk_version.sh を無効化。

ceres-solver-1.12.0 を使い、

EIGEN_PATH=/usr/local/include/eigen3 ~/Downloads/android-ndk-r21d/ndk-build

にてビルド。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0