提问人:Arthur Attout 提问时间:9/18/2019 最后编辑:Arthur Attout 更新时间:9/18/2019 访问量:465
未定义对 Android NDK 的 cv::imwrite 的引用
undefined reference to 'cv::imwrite with Android NDK
问:
我正在使用 CMAKE 构建使用 OpenCV 的 OpenALPR。
我的CMakeLists.txt包含以下语句:
# Discover OpenCV directory automatically
find_path(OpenCV_DIR
NAMES OpenCVConfig.cmake
HINTS ${CMAKE_SOURCE_DIR}/../libraries/opencv/
/storage/projects/alpr/libraries/opencv/
)
# Opencv Package
FIND_PACKAGE( OpenCV REQUIRED )
#Some code omitted for clarity ...
TARGET_LINK_LIBRARIES(alpr
${OPENALPR_LIB}
${STATE_DETECTION_LIB}
support
video
${OpenCV_LIBS}
${Tesseract_LIBRARIES}
${Extra_LIBS}
)
CMake 不会抱怨任何事情,所以我假设找到了 OpenCV(另外,在我即将提到的错误之前,很多东西都是使用 OpenCV 构建的)。
我用来构建一切的指令:
cmake \
-DANDROID_TOOLCHAIN=g++ \
-DCMAKE_TOOLCHAIN_FILE=$NDK_ROOT/build/cmake/android.toolchain.cmake \
-DANDROID_NDK=$NDK_ROOT \
-DCMAKE_BUILD_TYPE=Release \
-DANDROID_PLATFORM=$ANDROID_PLATFORM \
-DANDROID_ABI="$i" \
-DANDROID_STL=c++_shared \
-DANDROID_CPP_FEATURES="rtti exceptions" \
-DTesseract_INCLUDE_BASEAPI_DIR=$TESSERACT_SRC_DIR/api \
-DTesseract_INCLUDE_CCSTRUCT_DIR=$TESSERACT_SRC_DIR/ccstruct \
-DTesseract_INCLUDE_CCMAIN_DIR=$TESSERACT_SRC_DIR/ccmain \
-DTesseract_INCLUDE_CCUTIL_DIR=$TESSERACT_SRC_DIR/ccutil \
-DTesseract_LIB=$TESSERACT_LIB_DIR/libtess.so \
-DLeptonica_LIB=$TESSERACT_LIB_DIR/liblept.so \
-DOpenCV_DIR=$SCRIPTPATH/../OpenCV-android-sdk/sdk/native/jni \
-DJAVA_AWT_LIBRARY=$JAVA_AWT_LIBRARY \
-DJAVA_JVM_LIBRARY=$JAVA_JVM_LIBRARY \
-DJAVA_INCLUDE_PATH=$JAVA_INCLUDE_PATH \
-DJAVA_INCLUDE_PATH2=$JAVA_INCLUDE_PATH2 \
-DJAVA_AWT_INCLUDE_PATH=$JAVA_AWT_INCLUDE_PATH \
-DPngt_LIB=$TESSERACT_LIB_DIR/libpngt.so \
-DJpgt_LIB=$TESSERACT_LIB_DIR/libjpgt.so \
-DJnigraphics_LIB=$NDK_ROOT/platforms/$ANDROID_PLATFORM/arch-$arch/usr/$lib/libjnigraphics.so \
-DANDROID_ARM_MODE=arm \
../../src/
请注意,我使用的是 Android OpenCV SDK v3.4.3。我有一个未定义的错误:
openalpr/src/misc_utilities/prepcharsfortraining.cpp:224: error: undefined reference to 'cv::imwrite(cv::String const&, cv::_InputArray const&, std::__ndk1::vector<int, std::__ndk1::allocator<int> > const&)'
有罪文件具有以下包含语句:
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <sys/stat.h>
#include "support/filesystem.h"
#include "../tclap/CmdLine.h"
#include "support/utf8.h"
using namespace std;
using namespace cv;
using namespace alpr;
我不明白为什么找不到 imwrite。我尝试过使用 Android NDK 20、19、16 和 14,但没有运气
答: 暂无答案
评论
-lopencv_imgcodecs