Предупреждение: void checkGlError (const char *) 'используется, но никогда не определяется - PullRequest
0 голосов
/ 18 сентября 2011

Я собираю общую библиотеку, используя Android NDK r6b. Все классы C ++.

У меня есть два следующих класса:

Utils.hpp

#ifdef USE_OPENGL_ES_1_1
#include <GLES/gl.h>
#include <GLES/glext.h>
#else
#include <GLES2/gl2.h>
#include <GLES2/gl2ext.h>
#endif
#include <android/log.h>

// Utility for logging:
#define LOG_TAG    "ROTATEACCEL"
#define LOG(...)  __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__)
#define  LOGI(...)  __android_log_print(ANDROID_LOG_INFO,LOG_TAG,__VA_ARGS__)
#define  LOGE(...)  __android_log_print(ANDROID_LOG_ERROR,LOG_TAG,__VA_ARGS__)

#ifdef __cplusplus
extern "C" {
#endif

static void checkGlError(const char* op);

#ifdef __cplusplus
}
#endif

Utils.cpp

#include "Utils.hpp"

#ifdef __cplusplus
extern "C" {
#endif

static void checkGlError(const char* op) {
    for (GLint error = glGetError(); error; error
            = glGetError()) {
        LOGI("after %s() glError (0x%x)\n", op, error);
    }
}

#ifdef __cplusplus
}
#endif

Когда я хочу использовать эту функцию в других файлах C ++, я #include "Utils.hpp". Но в этих файлах я получаю сообщение об ошибке:

undefined reference to `checkGlError'

Почему я получаю это предупреждение?

Ответы [ 2 ]

7 голосов
/ 18 сентября 2011

Вы сделали это static. Поэтому он живет только в этой конкретной единице перевода. Решение состоит в том, чтобы удалить ключевое слово static.

В предупреждении говорится, что в заголовочном файле, который вы "пообещали", было бы определение в этом единстве перевода, если бы оно было необходимо, но оно не было предоставлено, и оно было необходимо.

2 голосов
/ 18 сентября 2011
static void checkGlError(const char* op);

Это статическая функция, то есть она имеет внутреннюю связь и поэтому не может быть вызвана из другой единицы перевода.

Удалите ключевое слово static из его объявления, а также из его определения, и оно будет работать нормально.

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