現象
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