美文网首页
Win10编译Android端使用的Assimp so库

Win10编译Android端使用的Assimp so库

作者: miniminiming | 来源:发表于2018-04-12 11:08 被阅读0次

    费尽周折终于搞出来了

    参考网址: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

    相关文章

      网友评论

          本文标题:Win10编译Android端使用的Assimp so库

          本文链接:https://www.haomeiwen.com/subject/okcxkftx.html