Неопределенная ссылка: cv :: imencode - PullRequest
0 голосов
/ 09 января 2019

Я создаю простое приложение для Android, которое требует некоторой обработки с помощью OpenCV и потоковой передачи их в виде потока MJPEG. Часть CV написана на C ++ (сначала я использовал Java, но это дало ~ 12FPS, а мне нужно ~ 25-30), и чтобы поддерживать высокий FPS, я хотел реализовать сервер MJPEG на C ++, также используя сокеты. Я попытался использовать https://github.com/JPery/MJPEGWriter, потому что у него простой API, и все функции, которые он использует, похоже, реализованы в Android NDK, но при попытке сборки я получил следующую ошибку, сообщающую, что imencode отсутствует:

Build command failed.
Error while executing process /Users/jonathano/Library/Android/sdk/cmake/3.6.4111459/bin/cmake with arguments {--build /Users/jonathano/frc/code/BugEyed/app/.externalNativeBuild/cmake/debug/x86_64 --target libdbugcv}
[1/2] Building CXX object CMakeFiles/libdbugcv.dir/src/main/jni/libdbugcv.cpp.o
[2/2] Linking CXX shared library ../../../../build/intermediates/cmake/debug/obj/x86_64/liblibdbugcv.so
FAILED: : && /Users/jonathano/Library/Android/sdk/ndk-bundle/toolchains/llvm/prebuilt/darwin-x86_64/bin/clang++  --target=x86_64-none-linux-android23 --gcc-toolchain=/Users/jonathano/Library/Android/sdk/ndk-bundle/toolchains/x86_64-4.9/prebuilt/darwin-x86_64 --sysroot=/Users/jonathano/Library/Android/sdk/ndk-bundle/sysroot -fPIC -isystem /Users/jonathano/Library/Android/sdk/ndk-bundle/sysroot/usr/include/x86_64-linux-android -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -std=c++11 -std=c++14 -frtti -fexceptions -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -nostdlib++ --sysroot /Users/jonathano/Library/Android/sdk/ndk-bundle/platforms/android-23/arch-x86_64 -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -L/Users/jonathano/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86_64 -Wl,--no-undefined -Wl,-z,noexecstack -Qunused-arguments -Wl,-z,relro -Wl,-z,now -shared -Wl,-soname,liblibdbugcv.so -o ../../../../build/intermediates/cmake/debug/obj/x86_64/liblibdbugcv.so CMakeFiles/libdbugcv.dir/src/main/jni/libdbugcv.cpp.o CMakeFiles/libdbugcv.dir/src/main/jni/libdbugudp.cpp.o CMakeFiles/libdbugcv.dir/src/main/jni/MJPEGWriter.cpp.o  -lGLESv2 /Users/jonathano/frc/code/opencv-android/sdk/native/jni/include/../../libs/x86_64/libopencv_java3.so -landroid -lEGL -llog -lm -latomic -lm "/Users/jonathano/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++_static.a" "/Users/jonathano/Library/Android/sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86_64/libc++abi.a" && :
/Users/jonathano/frc/code/BugEyed/app/src/main/jni/MJPEGWriter.cpp:77: error: undefined reference to 'cv::imencode(cv::String const&, cv::_InputArray const&, std::__ndk1::vector<unsigned char, std::__ndk1::allocator<unsigned char> >&, std::__ndk1::vector<int, std::__ndk1::allocator<int> > const&)'
clang++: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.

Очевидно, что существует какая-то проблема во время компоновки, но каждое решение, которое я нашел на SO или Google, не работает. Важно отметить, что любая другая функция OpenCV работает безупречно.

CMakeLists:

cmake_minimum_required(VERSION 3.4.1)

include_directories($ENV{OPENCV_JNI_INCLUDE_DIR})
add_library(lib_opencv SHARED IMPORTED)
set_target_properties(
    lib_opencv
    PROPERTIES
    IMPORTED_LOCATION
    $ENV{OPENCV_JNI_INCLUDE_DIR}/../../libs/${CMAKE_ANDROID_ARCH_ABI}/libopencv_java3.so
)

add_library(
    libdbugcv
    SHARED
    src/main/jni/libdbugcv.cpp
    src/main/jni/libdbugudp.cpp
    src/main/jni/MJPEGWriter.cpp
)

target_link_libraries(
    libdbugcv
    GLESv2
    lib_opencv
    android
    EGL
    log
    m
)

Используемая нами версия OpenCV - 3.4.4 (самая новая для Android). Как я могу это исправить?

...