Build Assimp library for Android
首先各路教程中有推薦使用 NDK 或者 STANDALONE TOOLCHAIN 編譯的,根據我的理解,這兩種方式都是可以的,如果能直接使用 NDK 編譯成功的話,就沒有必要使用 STANDALONE TOOLCHAIN 了。
NDK build assmip library
cmake
cmake -DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN} \
-DCMAKE_SYSTEM_NAME=Android -DANDROID_ABI=arm64-v8a \
-DANDROID_STL=c++_shared -DANDROID_TOOLCHAIN=clang -DANDROID_NATIVE_API_LEVEL=23 \
-DCMAKE_BUILD_TYPE=Release \
-DASSIMP_BUILD_TESTS=OFF -DBUILD_SHARED_LIBS=FALSE -DASSIMP_NO_EXPORT=TRUE \
-DASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT=FALSE -DASSIMP_BUILD_FBX_IMPORTER=TRUE -DASSIMP_BUILD_ASSIMP_TOOLS=OFF \
-DCMAKE_INSTALL_PREFIX=./install \
-DCMAKE_MAKE_PROGRAM=ninja -GNinja ..
其中:
NDK_PATH=${ANDROID_HOME}/ndk-bundle/
CMAKE_TOOLCHAIN=${ANDROID_HOME}/ndk-bundle/build/cmake/android.toolchain.cmake
注意其中的 ASSIMP_BUILD_TESTS
一定要設置關閉,否則編譯失敗,報一個 pthread 的鏈接錯誤。
cmake 執行后會有一些 warnning 可以不用解決。
-- Could NOT find rt (missing: RT_LIBRARY)
INFO RT-extension not found. glTF import/export will be built without Open3DGC-compression.
make
然后執行
ninja
ninja install
Update:
下述問題不再出現
此處遇到問題是 error: unknown type name 'z_crc_t'
直接找到對應的源文件,添加聲明即可。
typedef unsigned long z_crc_t;
Use lib
將動態庫和頭文件加入工程即可使用,記得將 cmake build 目錄下的 include/assimp/config.h
拷貝到所用的工程的 include 目錄下。
參考
https://wxdut.com/15271715037538.html