现象
undefined reference to XXXX (imwrite/imencode/....)
成因
编译的so所用STL与项目STL不一致。
现在项目一般用LLVM的C++_static,然而opencv3.4.1用的还是gnustl,opencv4用的LLVM故而无问题
解决办法
- 先改配置试试,opencv3修改STL为gnustl,opencv4为C++_static
- 如果其他依赖项会报错,那就看下一条
externalNativeBuild {
cmake {
arguments "-DANDROID_STL=gnustl_shared"
}
}
- 如果STL用的C++_static,用官方编译的opencv4 (4.3.0实测无问题)
- 如果STL用的gnustl,用opencv3 (3.4.1实测无问题)
- 如果头铁一定要用特定版本opencv和STL……那就需要自己编译so了。可以参照:链接
参考
https://blog.csdn.net/matrix_laboratory/article/details/79217973
https://stackoverflow.com/questions/50677231/linking-errors-on-android-with-opencv-3-4-0-and-ndk