"ошибка: 'xxx' необъявленная" _and_ "ошибка: неиспользуемая переменная 'xxx'" одновременно, в том же файле - PullRequest
0 голосов
/ 25 декабря 2011

У меня действительно странная проблема компиляции с JNI, и я вообще не знаю, как ее решить ...

Эта функция вызывается из статического контекста в моем коде Java:

private static final Logger logger
    = LoggerFactory.getLogger(PamHandle.class);

private static native void initLog(final Logger logger);

static {
    System.loadLibrary("pam4j");
    initLog(logger);
}

Заголовок, объявляющий эту функцию, выглядит следующим образом:

#ifndef __LOG__H__
#define __LOG__H__

#include <jni.h>

JNIEXPORT void JNICALL Java_org_eel_kitchen_pam_PamHandle_initLog(JNIEnv *env,
    jclass cls, jobject jlogger);

struct javaLogger {
    jobject logger;
    jmethodID debugID;
    void (*debug)(JNIEnv *env, struct javaLogger *logger, char *msg);
};

extern struct javaLogger logger;

void debug(JNIEnv *env, struct javaLogger *logger, char *msg);

#endif /* __LOG_H__ */

, и это файл C:

#include "log.h"

struct javaLogger logger;

JNIEXPORT void JNICALL Java_org_eel_kitchen_pam_PamHandle_initLog(JNIEnv *env,
    jclass cls, jobject jlogger)
{
    jclass class = (*env)->GetObjectClass(env, jlogger);

    logger.logger = jlogger;
    logger.debugID = (*env)->GetMethodID(env, class, "debug",
        "(Ljava/lang/String;)V");
    logger.debug = debug;
}

void debug(JNIEnv *env, struct javaLogger *logger, char *msg)
{
    jstring jsmg = (*env)->NewStringUTF(env, (const char *)msg);

    if (jmsg)
        (*env)->CallVoidMethod(env, logger->logger, logger->debugID, jmsg);
}

Но когда я пытаюсь скомпилировать его (с помощью gcc -c -Wall -Werror -Wstrict-prototypes -Wmissing-prototypes -fPIC -g -c -I$JAVA_HOME/include -I$JAVA_HOME/include/linux log.c), это вывод, который я получаю:

log.c: In function ‘debug’:
log.c:20:9: error: ‘jmsg’ undeclared (first use in this function)
log.c:20:9: note: each undeclared identifier is reported only once for each function it appears in
cc1: warnings being treated as errors
log.c:18:13: error: unused variable ‘jsmg’

Э-э ... Я совершенно ошеломлен.Что здесь происходит?: / Я, должно быть, упускаю что-то очень очевидное, я просто не могу понять, что ...

1 Ответ

4 голосов
/ 25 декабря 2011

jmsg и jsmg - это две разные вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...