Why
ndkr18调用opencv异常。
Google在NDK r18将删除gcc,所以Android开发jni的小伙伴们再也无法使用gcc来进行编译。通常我们在Application.mk中指定使用什么库来打包JNI代码:
APP_STL := gnustl_shared
但是在更新ndk bundle到r18后,此命令将报错,提示无法使用gcc进行编译。
查看可选库
Changes
1. APP_STL := gnustl_shared ==> APP_STL := c++_shared
2.sdk中的platform-tools的内容需要是platform-tools_r25-linux.zip以下(包含r25),因为在r25之后,“android"这个命令已经无法使用,会导致opencv编译过程中找不到该命令;
配置完成之后可以在命令行中,使用"android”运行一下,看能否启动sdkmanager,如果能够启动,则表示此命令配置正常。
3.如果需要编译opencv_contrib-4.0.0,改造ndk-10.config.py 内容==>
ABIs = [
ABI("2", "armeabi-v7a", "arm-linux-androideabi-4.9", cmake_vars=dict(ANDROID_ABI='armeabi-v7a with NEON')),
ABI("3", "arm64-v8a", "aarch64-linux-android-4.9"),
ABI("5", "x86_64", "x86_64-4.9"),
ABI("4", "x86", "x86-4.8"),
]
cmake不知还此mips和armeabi了。
4.本地环境配置可能存在误差,导致toolchain找不到,改造部分代码build_sdk.py:
if toolchain is not None:
self.cmake_vars['ANDROID_TOOLCHAIN_NAME'] = toolchain
else:
self.cmake_vars['ANDROID_TOOLCHAIN'] = 'clang'
self.cmake_vars['ANDROID_STL'] = 'c++_static'
==>>
#if toolchain is not None:
# self.cmake_vars['ANDROID_TOOLCHAIN_NAME'] = toolchain
#else:
self.cmake_vars['ANDROID_TOOLCHAIN'] = 'clang'
self.cmake_vars['ANDROID_STL'] = 'c++_static'
综上是我编译android sdk的时候更改过的内容,作为记录。