【发布时间】:2016-08-03 10:38:02
【问题描述】:
我正在尝试使用现有的使用 OpenCV 的 c++ 代码构建 Android 应用程序。 但 Android NDK 表示“未定义对 'TestMath::getHello()' 的引用”
这是我的 Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
#opencv
OPENCVROOT := /mypath/OpenCV-android-sdk
OPENCV_CAMERA_MODULES := off
OPENCV_INSTALL_MODULES := off
OPENCV_LIB_TYPE := SHARED
include ${OPENCVROOT}/sdk/native/jni/OpenCV.mk
LOCAL_MODULE := CrossMath
LOCAL_SRC_FILES := com_testapp_recognition_TestMath.cpp
LOCAL_SHARED_LIBRARIES := -lopencv_java3
include $(BUILD_SHARED_LIBRARY)
应用程序.mk:
APP_ABI := all
APP_CPPFLAGS := -frtti -fexceptions -std=c++11
APP_STL := gnustl_static
APP_PLATFORM := android-16
com_testapp_recognition_TestMath.hpp:
#include <jni.h>
#include "CrossMath/TestMath.hpp"
#ifndef _Included_com_testapp_recognition_TestMath
#define _Included_com_testapp_recognition_TestMath
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jint JNICALL Java_com_testapp_recognition_TestMath_recognize(JNIEnv *, jobject, cv::Mat& originalImage);
#ifdef __cplusplus
}
#endif
#endif
com_testapp_recognition_TestMath.cpp:
#include "com_testapp_recognition_TestMath.hpp"
JNIEXPORT jint JNICALL Java_com_testapp_recognition_TestMath_recognize(JNIEnv *, jobject, cv::Mat& originalImage) {
return TestMath::getHello().size();
}
最后是位于子文件夹 CrossMath 中的 TestMath.cpp:
#include "TestMath.hpp"
namespace TestMath {
string getHello() {
return "Hello";
}
}
TestMath.hpp:
#ifndef TestMath_hpp
#define TestMath_hpp
#include <stdio.h>
#include <iostream>
#include "opencv2/core/core_c.h"
#include "opencv2/opencv.hpp"
#include "opencv2/highgui.hpp"
namespace TestMath {
string getHello();
}
Java 类和其他人员已定义,我检查了路径并包含在文件中。
错误:
Error:(13) undefined reference to `TestMath::getHello()'
【问题讨论】:
-
请添加完整且准确的错误消息。我真的不明白
CrossMath/TestMath.hpp的意义。函数实现不应该放在头文件中。 -
@Michael 这显然是错字...
-
string应该是什么?std::string?如果是这样,你在哪里包括<string>,你在哪里声明你希望它是std命名空间中的string? -
如果问题出在字符串类型错误将是另一个,无论如何,我添加了
没有任何改变。
标签: android c++ opencv android-ndk