费尽周折终于搞出来了
参考网址:https://blog.csdn.net/camellhf/article/details/78065622
尝试路线
1. 在LearnOpengl网站上跟教程走
最初想用cmake-gui.exe去编译出来一个可以在PC端用的lib,但是始终编译不成功。
2.后来改用安卓端编译
官方引导页:https://github.com/assimp/assimp/wiki/Android-compilation-on-Windows-%28Quick-overview%29
是使用cmake-gui.exe配合Ninja进行编译的方式,但是也不成功。
3.使用文章开头网址的方法,基本上也是失败好多次。
这么多失败的原因,都是报一些源码上的错误。不管我是下载3.3.1版本,还是下载4.0.1版本,全都会报源码的错误。一怒之下去github下载当前最新的,居然编译成功了。。。
但是用这新的源码去用官方推荐的步骤编译,仍然不通过,报一些函数未定义的错误。
下面是我用的两个编译工具(需要先安装python)
注意这一步是创造编译工具链
make_standalong_toolchain.bat
//64位的指令
python G:\AndroidSDK\ndk-bundle\build\tools\make_standalone_toolchain.py --arch=arm64 --stl=libc++ --api=24 --install-dir=android-toolchain-24-llvm-arm64v8a
//32位的指令
python G:\AndroidSDK\ndk-bundle\build\tools\make_standalone_toolchain.py --arch=arm --stl=libc++ --api=24 --install-dir=android-toolchain-24-llvm-armeabi-v7a
build_assimp.bat
这个是实际编译出assimp库的windows编译脚本,这里使用到了上面用Python编译出来的工具链
@echo off
cls
REM *NOTE* Change these based on
SET ASSIMP_DIR=assimp-4.1.0
SET OUTPUT_DIR=assimp-build-arm64v8a
SET ANDROID_PATH=D:\android-studio-sdk\sdk
SET NDK_PATH=D:\android-studio-sdk\sdk\ndk-bundle
SET NDK_TOOLCHAIN=D:\cl_workspace\assimp-4.1.0\android-toolchain-24-llvm-arm64v8a
SET CMAKE_TOOLCHAIN=%NDK_PATH%\build\cmake\android.toolchain.cmake
SET CMAKE_PATH=%ANDROID_PATH%\cmake\3.6.4111459
REM *NOTE* Careful if you don't want rm -rf, I use it for testing purposes.
rm -rf %OUTPUT_DIR%
mkdir %OUTPUT_DIR%
REM pushd doesn't seem to work ):<
cd %OUTPUT_DIR%
if not defined ORIGPATH set ORIGPATH=%PATH%
SET PATH=%CMAKE_PATH%\bin;%ANDROID_PATH%\tools;%ANDROID_PATH%\platform-tools;%ORIGPATH%
cmake ^
-GNinja ^
-DCMAKE_TOOLCHAIN_FILE=%CMAKE_TOOLCHAIN% ^
-DASSIMP_ANDROID_JNIIOSYSTEM=ON ^
-DANDROID_NDK=%NDK_PATH% ^
-DCMAKE_MAKE_PROGRAM=%CMAKE_PATH%\bin\ninja.exe ^
-DCMAKE_BUILD_TYPE=Release ^
-DANDROID_ABI="arm64-v8a" ^
-DANDROID_NATIVE_API_LEVEL=24 ^
-DANDROID_FORCE_ARM_BUILD=TRUE ^
-DCMAKE_INSTALL_PREFIX=install ^
-DANDROID_STL=c++_static^
-DCMAKE_CXX_FLAGS=-Wno-c++11-narrowing ^
-DANDROID_TOOLCHAIN=clang ^
-DASSIMP_BUILD_TESTS=OFF ^
../%ASSIMP_DIR%
cmake --build .
cd ..
pause
下面是32位的编译,后面的几条指令可以让它只编译某几种格式的库,大大减小了so的大小,否则像上面的64位库,出来就是160M的so库
另外还发现一个规律,下面这个脚本cmake结尾的../%ASSIMP_DIR% 与上面的配置只有有一行空行,有两行空行就会报错。。这跟windows的脚本规则有关吗?
还有,就是要把c++_shared改成c++_static不然用的时候报各种错误。
@echo off
cls
REM *NOTE* Change these based on
SET ASSIMP_DIR=assimp-v.5.0.0.rc1
SET OUTPUT_DIR=assimp-build-arm-v7a
SET ANDROID_PATH=G:\AndroidSDK
SET NDK_PATH=G:\AndroidSDK\ndk-bundle
SET NDK_TOOLCHAIN=G:\Assimp\assimp-v.5.0.0.rc1\android-toolchain-24-llvm-armeabi-v7a
SET CMAKE_TOOLCHAIN=%NDK_PATH%\build\cmake\android.toolchain.cmake
SET CMAKE_PATH=%ANDROID_PATH%\cmake\3.6.4111459
REM *NOTE* Careful if you don't want rm -rf, I use it for testing purposes.
rm -rf %OUTPUT_DIR%
mkdir %OUTPUT_DIR%
REM pushd doesn't seem to work ):<
cd %OUTPUT_DIR%
if not defined ORIGPATH set ORIGPATH=%PATH%
SET PATH=%CMAKE_PATH%\bin;%ANDROID_PATH%\tools;%ANDROID_PATH%\platform-tools;%ORIGPATH%
cmake ^
-GNinja ^
-DCMAKE_TOOLCHAIN_FILE=%CMAKE_TOOLCHAIN% ^
-DASSIMP_ANDROID_JNIIOSYSTEM=ON ^
-DANDROID_NDK=%NDK_PATH% ^
-DCMAKE_MAKE_PROGRAM=%CMAKE_PATH%\bin\ninja.exe ^
-DCMAKE_BUILD_TYPE=Release ^
-DANDROID_ABI="armeabi-v7a" ^
-DANDROID_NATIVE_API_LEVEL=24 ^
-DANDROID_FORCE_ARM_BUILD=TRUE ^
-DCMAKE_INSTALL_PREFIX=install ^
-DANDROID_STL=c++_static ^
-DCMAKE_CXX_FLAGS=-Wno-c++11-narrowing ^
-DANDROID_TOOLCHAIN=clang-Wl-s ^
-DASSIMP_BUILD_TESTS=OFF ^
-DASSIMP_NO_EXPORT=ON ^
-DASSIMP_BUILD_ASSIMP_TOOLS=OFF ^
-DASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT=OFF ^
-DASSIMP_BUILD_OBJ_IMPORTER=ON ^
-DASSIMP_BUILD_FBX_IMPORTER=ON ^
../%ASSIMP_DIR%
cmake --build .
cd ..
pause
附上一个编译好的库,还是用这个吧,需要翻墙能下
https://drive.google.com/file/d/0B1y4UxBy3HOrZElkWTVhU0k2cW8/view
网友评论