opencv-mobile icon indicating copy to clipboard operation
opencv-mobile copied to clipboard

编译Android报错

Open 7288Fzq opened this issue 1 year ago • 2 comments

编译时报错:

(base) tony@ubuntu:~/Downloads/Android/HelloWorld/build$ make -j8 [ 50%] Building CXX object CMakeFiles/hello-world.dir/src/main.cpp.o [100%] Linking CXX executable hello-world /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(matrix.cpp.o):matrix.cpp:function std::__ndk1::__throw_length_error[abi:nn180000](char const*): error: undefined reference to 'std::__ndk1::__libcpp_verbose_abort(char const*, ...)' /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(matrix_transform.cpp.o):matrix_transform.cpp:function std::__throw_bad_array_new_lengthabi:nn180000: error: undefined reference to 'std::__ndk1::__libcpp_verbose_abort(char const*, ...)' /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::Exception::formatMessage(): error: undefined reference to 'std::__ndk1::basic_stringbuf<char, std::__ndk1::char_traits, std::__ndk1::allocator >::str() const' /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::Exception::formatMessage(): error: undefined reference to 'VTT for std::__ndk1::basic_stringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::Exception::formatMessage(): error: undefined reference to 'vtable for std::__ndk1::basic_stringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: the vtable symbol may be undefined because the class is missing its key function /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::Exception::formatMessage(): error: undefined reference to 'vtable for std::__ndk1::basic_stringbuf<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: the vtable symbol may be undefined because the class is missing its key function /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function std::__ndk1::__throw_out_of_range[abi:nn180000](char const*): error: undefined reference to 'std::__ndk1::__libcpp_verbose_abort(char const*, ...)' /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::HWFeatures::initialize(): error: undefined reference to 'VTT for std::__ndk1::basic_stringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::HWFeatures::initialize(): error: undefined reference to 'vtable for std::__ndk1::basic_stringbuf<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: the vtable symbol may be undefined because the class is missing its key function /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::HWFeatures::initialize(): error: undefined reference to 'vtable for std::__ndk1::basic_stringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: the vtable symbol may be undefined because the class is missing its key function /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::HWFeatures::initialize(): error: undefined reference to 'std::__ndk1::basic_stringbuf<char, std::__ndk1::char_traits, std::__ndk1::allocator >::str() const' /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::HWFeatures::initialize(): error: undefined reference to 'vtable for std::__ndk1::basic_stringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: the vtable symbol may be undefined because the class is missing its key function /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::HWFeatures::initialize(): error: undefined reference to 'vtable for std::__ndk1::basic_stringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: the vtable symbol may be undefined because the class is missing its key function /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::HWFeatures::initialize(): error: undefined reference to 'std::__ndk1::basic_stringbuf<char, std::__ndk1::char_traits, std::__ndk1::allocator >::str() const' /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function cv::HWFeatures::initialize(): error: undefined reference to 'std::__ndk1::basic_stringbuf<char, std::__ndk1::char_traits, std::__ndk1::allocator >::str() const' /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(check.cpp.o):check.cpp:function std::__ndk1::basic_stringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >::basic_stringstreamabi:nn180000: error: undefined reference to 'VTT for std::__ndk1::basic_stringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(check.cpp.o):check.cpp:function std::__ndk1::basic_stringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >::basic_stringstreamabi:nn180000: error: undefined reference to 'vtable for std::__ndk1::basic_stringbuf<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: the vtable symbol may be undefined because the class is missing its key function /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(check.cpp.o):check.cpp:function cv::detail::check_failed_MatType(int, int, cv::detail::CheckContext const&): error: undefined reference to 'VTT for std::__ndk1::basic_stringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(check.cpp.o):check.cpp:function cv::detail::check_failed_MatType(int, int, cv::detail::CheckContext const&): error: undefined reference to 'vtable for std::__ndk1::basic_stringbuf<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: the vtable symbol may be undefined because the class is missing its key function /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(logger.cpp.o):logger.cpp:function cv::utils::logging::internal::writeLogMessage(cv::utils::logging::LogLevel, char const*): error: undefined reference to 'VTT for std::__ndk1::basic_ostringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(logger.cpp.o):logger.cpp:function cv::utils::logging::internal::writeLogMessage(cv::utils::logging::LogLevel, char const*): error: undefined reference to 'vtable for std::__ndk1::basic_ostringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: the vtable symbol may be undefined because the class is missing its key function /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(logger.cpp.o):logger.cpp:function cv::utils::logging::internal::writeLogMessageEx(cv::utils::logging::LogLevel, char const*, char const*, int, char const*, char const*): error: undefined reference to 'VTT for std::__ndk1::basic_ostringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(logger.cpp.o):logger.cpp:function cv::utils::logging::internal::writeLogMessageEx(cv::utils::logging::LogLevel, char const*, char const*, int, char const*, char const*): error: undefined reference to 'vtable for std::__ndk1::basic_ostringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: the vtable symbol may be undefined because the class is missing its key function /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(parallel.cpp.o):parallel.cpp:function cv::parallel::ParallelBackendRegistry::dumpBackends() const: error: undefined reference to 'VTT for std::__ndk1::basic_ostringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_core.a(parallel.cpp.o):parallel.cpp:function cv::parallel::ParallelBackendRegistry::dumpBackends() const: error: undefined reference to 'vtable for std::__ndk1::basic_ostringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: the vtable symbol may be undefined because the class is missing its key function /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_highgui.a(highgui.cpp.o):highgui.cpp:function cv::imread(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&, int): error: undefined reference to 'vtable for std::__ndk1::basic_istringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' /home/tony/Downloads/Android/android-ndk-r21e-linux-x86_64/android-ndk-r21e/toolchains/llvm/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin/ld: the vtable symbol may be undefined because the class is missing its key function /home/tony/Downloads/Android/HelloWorld/opencv-mobile-4.10.0-android/sdk/native/staticlibs/armeabi-v7a/libopencv_highgui.a(highgui.cpp.o):highgui.cpp:function cv::imread(std::__ndk1::basic_string<char, std::__ndk1::char_traits, std::__ndk1::allocator > const&, int): error: undefined reference to 'VTT for std::__ndk1::basic_istringstream<char, std::__ndk1::char_traits, std::__ndk1::allocator >' clang++: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: *** [CMakeFiles/hello-world.dir/build.make:105: hello-world] Error 1 make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/hello-world.dir/all] Error 2 make: *** [Makefile:91: all] Error 2

请问一下原因!谢谢。使用的工具是android-ndk-r21e-linux-x86_64 cmakelists:

`cmake_minimum_required(VERSION 3.10)

project(HelloWorld)

设置为 Android 架构

set(CMAKE_SYSTEM_NAME Android) set(CMAKE_SYSTEM_VERSION 21)

设置 STL 类型为静态库

#set(CMAKE_ANDROID_STL_TYPE c++_static)

设置编译选项,以确保生成的程序为 Position Independent Executable (PIE)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE") set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -fPIE -pie")

set(OpenCV_DIR ${CMAKE_SOURCE_DIR}/opencv-mobile-4.10.0-android/sdk/native/jni) find_package(OpenCV REQUIRED)

添加源文件

add_executable(hello-world src/main.cpp)

target_link_libraries(hello-world ${OpenCV_LIBS}) `

7288Fzq avatar Nov 17 '24 08:11 7288Fzq

解决了吗,我也遇到这个问题

copper202310 avatar Jan 11 '25 03:01 copper202310

更新 ndk r27

nihui avatar Jan 11 '25 08:01 nihui