我刚开始用代码:: blocks从superbible(第6版)学习openGL。 但是当我尝试运行第一个示例代码时,我从sb6.h文件中得到一个未定义的平台错误。
示例代码:
#include "sb6.h"
// Derive my_application from sb6::application
class my_application : public sb6::application
{
public:
// Our rendering function
void render(double currentTime)
{
// Simply clear the window with red
static const GLfloat red[] = { 1.0f, 0.0f, 0.0f, 1.0f };
glClearBufferfv(GL_COLOR, 0, red);
}
};
// Our one and only instance of DECLARE_MAIN
DECLARE_MAIN(my_application);
有谁知道如何解决这个问题?
答案 0 :(得分:5)
这是因为header file期望定义_WIN32
,_LINUX
或__APPLE__
之一。通常这些是由编译器或平台的标头之一定义的。您也可以将它们传递给编译器,例如-D_LINUX
或在包含其标题之前在源文件中定义它,例如:
#ifndef _LINUX
#define _LINUX
#endif
gcc
实际上定义了__linux
,但这不是头文件正在检查的内容。
答案 1 :(得分:1)
您似乎没有使用随项目提供的CMake。 CMake构建过程会在检测到Linux系统时自动添加-D_LINUX。请参阅第135行周围的文件CMakeLists.txt(https://github.com/prabindh/sb6code/blob/master/CMakeLists.txt)。如果您不使用CMake,则需要对构建标志执行类似的添加。
答案 2 :(得分:0)
sb6.h的结尾有一套用于各种操作系统的预处理器定义,' #elif定义_LINUX ||定义 APPLE '由于某种原因没有到达。我从### ifif中定义_WIN32'到' APPLE '来自' #else'到最后##endie'。在这些注释掉的部分之间是#define DECLARE_MAIN(a)'这是必要的。
祝其他程序编译好运。