2011-09-18 99 views
0

我正在使用Android NDK r6b编译共享库。所有类都是C++。警告:'void checkGlError(const char *)'被使用但从未定义过

我有以下两类:

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' 

为什么我会收到此警告?

回答

7

你已经做到了static。因此,它只能生活在特定的翻译单元中。解决方法是删除static关键字。

警告告诉你,在“承诺”的头文件中,如果需要的话,会在翻译统一中有一个定义,但是没有提供一个定义,并且它是需要的。

2
static void checkGlError(const char* op); 

这是一个静态功能,这意味着,它具有内部连接的,因此不能从另一个翻译单元调用。

从它的声明和它的定义中删除static关键字,它会正常工作。

相关问题