Skip to content

编译Android报错 #166

@7288Fzq

Description

@7288Fzq

编译时报错:

(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})
`

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions