0

我在一个带有 c++ 文件(NDK)的 Android 项目中工作,但我遇到了一个找不到本地方法的问题,当我添加 extern "C" { } 时,我遇到了新问题,即声明 c 函数 '..' 冲突.h 之前的声明是我的代码

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_marwen_parojet_ocr_2_PostPhot */

#ifndef _Included_com_marwen_parojet_ocr_2_PostPhot
#define _Included_com_marwen_parojet_ocr_2_PostPhot
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_marwen_parojet_ocr_2_PostPhot
 * Method:    Traiter
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_com_marwen_parojet_1ocr_12_PostPhot_Traiter
  (JNIEnv *, jclass, jstring);

#ifdef __cplusplus
}
#endif
#endif

这个 traitement_jni.h 和 .cpp 文件是

#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv/cv.h>
#include "opencv2/ml/ml.hpp"
#include <android/log.h>
#include <jni.h>
#include "traitement_jni.h"
#include <stdlib.h>
extern "C" {
JNIEXPORT void JNICALL Java_com_marwen_parojet_1ocr_12_PostPhot_Traiter(JNIEnv* env,    jobject,jstring path){
  ...
 }
 }
4

1 回答 1

1

似乎您jclass在声明中传递了 a ,但jobject在定义中传递了 a 。如果这两种类型不是同一类型的别名,这不起作用:您不能重载 extern "C" 函数。

头文件:

extern "C" {
    JNIEXPORT void JNICALL Java_com_marwen_parojet_1ocr_12_PostPhot_Traiter(
        JNIEnv *,
        jclass,    // <---- here
        jstring);
}

源文件:

...
extern "C" {
    JNIEXPORT void JNICALL Java_com_marwen_parojet_1ocr_12_PostPhot_Traiter(
        JNIEnv* env,
        jobject,   // <---- here
        jstring path){
        ...
    }
}
于 2013-09-02T19:43:21.850 回答