error: undefined reference in JNI function After upgrading NDK and Cmake for Android Studio
error: undefined reference in JNI function After upgrading NDK and Cmake for Android Studio
我重新安装了 Android Studio 并将 NDK 和 CMake 升级到最新版本。之后我得到了这个错误:
Error while executing process /home/wxh/Android/Sdk/cmake/3.6.4111459/bin/cmake with arguments {--build /home/wxh/AndroidStudioProjects/Measure_It/app/.externalNativeBuild/cmake/debug/armeabi-v7a --target removebackground}
[1/2] Building CXX object CMakeFiles/removebackground.dir/src/main/cpp/removebackground.cpp.o
[2/2] Linking CXX shared library
error: undefined reference to 'cv::imwrite(cv::String const&, cv::_InputArray const&, std::__ndk1::vector<int, std::__ndk1::allocator<int> > const&)'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
代码之前编译得很好,所以没有拼写错误。
仔细检查:
imgproc.hpp
已包含。
CMakeList.txt
包含路径和库路径:
include_directories(/home/wxh/Android/opencv_sdk/native/jni/include)
add_library( lib_opencv SHARED IMPORTED )
set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION /home/wxh/Android/opencv_sdk/native/libs/${ANDROID_ABI}/libopencv_java3.so)
应用build.gradle
有
DefaultConfig{externalNativeBuild {
cmake { cppFlags "-frtti -fexceptions -std=c++11 "
arguments '-DANDROID_STL=c++_shared'
abiFilters 'armeabi-v7a'}}}
externalNativeBuild { cmake { path "CMakeLists.txt"} }
跟opencv没关系,因为没改过
还有什么问题???
OpenCV 3 正在使用 NDK 不再支持的 gunstl。新版本的 NDK 只有 c++_static
和 c++_shared
STL。您可以使用新版本的 NDK 从源代码重建 OpenCV 3.x 并选择受支持的 STL 选项之一,或者您可以使用预构建的 OpenCV 4.x c++_static
。
修复您的代码以涵盖 3.x 和 4.x 之间的 API 差异可能比从源代码重建 OpenCV 更容易。
我重新安装了 Android Studio 并将 NDK 和 CMake 升级到最新版本。之后我得到了这个错误:
Error while executing process /home/wxh/Android/Sdk/cmake/3.6.4111459/bin/cmake with arguments {--build /home/wxh/AndroidStudioProjects/Measure_It/app/.externalNativeBuild/cmake/debug/armeabi-v7a --target removebackground}
[1/2] Building CXX object CMakeFiles/removebackground.dir/src/main/cpp/removebackground.cpp.o
[2/2] Linking CXX shared library
error: undefined reference to 'cv::imwrite(cv::String const&, cv::_InputArray const&, std::__ndk1::vector<int, std::__ndk1::allocator<int> > const&)'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
代码之前编译得很好,所以没有拼写错误。 仔细检查:
imgproc.hpp
已包含。CMakeList.txt
包含路径和库路径:include_directories(/home/wxh/Android/opencv_sdk/native/jni/include) add_library( lib_opencv SHARED IMPORTED ) set_target_properties(lib_opencv PROPERTIES IMPORTED_LOCATION /home/wxh/Android/opencv_sdk/native/libs/${ANDROID_ABI}/libopencv_java3.so)
应用
build.gradle
有DefaultConfig{externalNativeBuild { cmake { cppFlags "-frtti -fexceptions -std=c++11 " arguments '-DANDROID_STL=c++_shared' abiFilters 'armeabi-v7a'}}} externalNativeBuild { cmake { path "CMakeLists.txt"} }
跟opencv没关系,因为没改过
还有什么问题???
OpenCV 3 正在使用 NDK 不再支持的 gunstl。新版本的 NDK 只有 c++_static
和 c++_shared
STL。您可以使用新版本的 NDK 从源代码重建 OpenCV 3.x 并选择受支持的 STL 选项之一,或者您可以使用预构建的 OpenCV 4.x c++_static
。
修复您的代码以涵盖 3.x 和 4.x 之间的 API 差异可能比从源代码重建 OpenCV 更容易。