android - NDK冲突c/c++

标签 android c++ c android-ndk

我在一个带有 C++ 文件 (NDK) 的 Android 项目中工作,但我遇到了一个问题 未找到 native 方法,当我添加 外部“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){
  ...
 }
 }

最佳答案

您似乎在声明中传递了一个 jclass,但在定义中传递了一个 jobject。如果这两种类型不是同一类型的别名,这将不起作用:您不能重载 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){
        ...
    }
}

关于android - NDK冲突c/c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18579787/

相关文章:

android - 嵌套协调器 + AppBar 布局不起作用

c++ - 继承模板类的构造函数

c++ - typedef shared_ptr<T> 转换为 bool

c - 恢复快照后恢复Socket

c - 对 'xcb_event_get_label' 的 undefined reference

android - 异步任务异常

java - Android:停止退出 LockTask/Kiosk 模式的后退按钮

android - Android 应用程序崩溃后向服务器发送日志文件

c++ - 从指向其类成员之一的指针计算类的指针

c - 全局数组不存储值