android — ошибка для cv :: FileStorage в JNI

Я получаю ошибки при компиляции моего native.cpp файла в Eclipse ADT / NDK.

При компиляции следующих строк кода

FileStorage storage(nativepath, FileStorage::WRITE);
storage << "img" << mat;
storage.release();

Ошибки

D: /androidworkspace/Augmented-Reality//obj/local/arm64-v8a/objs/ndksetup/native.o:
В функции
Java_com_shahrukh_AugmentedReality_CAMShiftDetection_savemat(_JNIEnv*,
_jobject*, long long, _jstring*)': D:\androidworkspace\Augmented-Reality/jni/native.cpp:14: undefined
reference to
cv :: FileStorage :: FileStorage (std :: string const&Int
std :: string const&)»
D: /androidworkspace/Augmented-Reality//obj/local/arm64-v8a/objs/ndksetup/native.o:
В функции operator<<':
D:/android-development/OpenCV-2.4.10-android-sdk/OpenCV-2.4.10-android-sdk/sdk/native/jni/include/opencv2/core/operations.hpp:2923:
undefined reference to
резюме :: оператор<<(Резюме :: FileStorage&, std :: string
Const&)»
D: /androidworkspace/Augmented-Reality//obj/local/arm64-v8a/objs/ndksetup/native.o:
В функции operator<< <cv::Mat>':
D:/android-development/OpenCV-2.4.10-android-sdk/OpenCV-2.4.10-android-sdk/sdk/native/jni/include/opencv2/core/operations.hpp:2914:
undefined reference to
резюме :: написать (резюме :: FileStorage&, std :: string
Const&, cv :: Mat const&)»
D: /androidworkspace/Augmented-Reality//obj/local/arm64-v8a/objs/ndksetup/native.o:
В функции
Java_com_shahrukh_AugmentedReality_CAMShiftDetection_savemat(_JNIEnv*,
_jobject*, long long, _jstring*)': D:\androidworkspace\Augmented-Reality/jni/native.cpp:16: undefined
reference to
резюме :: FileStorage :: расцепитель ()»
D: \ androidworkspace \ Augmented-Reality / jni / native.cpp: 18: не определено
ссылка на cv::FileStorage::~FileStorage()'
D:/androidworkspace/Augmented-Reality//obj/local/arm64-v8a/objs/ndksetup/native.o:
In function
оператор<< «:
D: /android-development/OpenCV-2.4.10-android-sdk/OpenCV-2.4.10-android-sdk/sdk/native/jni/include/opencv2/core/operations.hpp: 2913:
неопределенная ссылка на cv::Exception::Exception(int, std::string
const&, std::string const&, std::string const&, int)'
D:/android-development/OpenCV-2.4.10-android-sdk/OpenCV-2.4.10-android-sdk/sdk/native/jni/include/opencv2/core/operations.hpp:2913:
undefined reference to
cv :: error (cv :: Исключение const&)»
D: /android-development/OpenCV-2.4.10-android-sdk/OpenCV-2.4.10-android-sdk/sdk/native/jni/include/opencv2/core/operations.hpp: 2913:
неопределенная ссылка на cv::Exception::~Exception()'
D:/android-development/OpenCV-2.4.10-android-sdk/OpenCV-2.4.10-android-sdk/sdk/native/jni/include/opencv2/core/operations.hpp:2913:
undefined reference to
резюме :: Exception :: ~ Exception ()»
D: /androidworkspace/Augmented-Reality//obj/local/arm64-v8a/objs/ndksetup/native.o:
В функции
Java_com_shahrukh_AugmentedReality_CAMShiftDetection_savemat(_JNIEnv*,
_jobject*, long long, _jstring*)': D:\androidworkspace\Augmented-Reality/jni/native.cpp:18: undefined
reference to
cv :: FileStorage :: ~ FileStorage () ‘collect2.exe: ошибка: ld
вернул 1 статус выхода make.exe: ***
[D: /androidworkspace/Augmented-Reality//obj/local/arm64-v8a/libndksetup.so] Ошибка 1

Это мое native.cpp файл

#include <jni.h>
#include <stdio.h>
#include <string.h>
#include <android/log.h>
#include <opencv2/core/core.hpp>

using namespace cv;

JNIEXPORT void Java_com_shahrukh_AugmentedReality_CAMShiftDetection_savemat(JNIEnv *env, jobject obj,jlong addrmat, jstring path)
{
const char *nativepath = env->GetStringUTFChars(path, 0);
Mat& mat = *(Mat*)addrmat;

FileStorage storage(nativepath, FileStorage::WRITE);
storage << "img" << mat;
storage.release();

env->ReleaseStringUTFChars(path, nativepath);
}

Это мое Android.mk файл

LOCAL_PATH := $(call my-dir)

export OPENCV_PACKAGE_DIR = D:/android-development/OpenCV-2.4.10-android-sdk/OpenCV-2.4.10-android-sdk/sdk/native/jni

include $(CLEAR_VARS)
OPENCV_CAMERA_MODULES:=off
include $(OPENCV_PACKAGE_DIR)/OpenCV.mk

LOCAL_LDLIBS := -llog -ldl

LOCAL_MODULE    := ndksetup
LOCAL_SRC_FILES := native.cpp

include $(BUILD_SHARED_LIBRARY)

Это мое Application.mk

APP_STL := gnustl_static
APP_CPPFLAGS := -frtti -fexceptions
APP_ABI := all

0

Решение

После долгих отладок я обнаружил, что ошибка была довольно маленькой

Ошибка была в строке

LOCAL_LDLIBS := -llog -ldl

Линия должна была быть

LOCAL_LDLIBS += -llog -ldl
0

Другие решения


По вопросам рекламы [email protected]