C++ 警告:';无效校验错误(常量字符*)&x27;使用但从未定义

C++ 警告:';无效校验错误(常量字符*)&x27;使用但从未定义,c++,compiler-errors,C++,Compiler Errors,我正在使用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> // Ut

我正在使用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
#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++文件中使用这个函数时,我的代码> >包含“UTIL.HPP”< /C>。但是,在这些文件中,我得到了一个错误:

undefined reference to `checkGlError'
为什么我会收到这个警告

static void checkGlError(const char* op);
它是一个静态函数,也就是说,它具有内部链接,因此不能从另一个翻译单元调用

从声明和定义中删除
static
关键字,这样就可以正常工作了

它是一个静态函数,也就是说,它具有内部链接,因此不能从另一个翻译单元调用


static
关键字从其声明和定义中删除,它就可以正常工作了。

您已经将其设置为
static
。因此,它只存在于特定的翻译单元中。解决方案是删除
static
关键字


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

您已将其设置为
静态
。因此,它只存在于特定的翻译单元中。解决方案是删除
static
关键字

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