Superbible第6版未定义平台错误

时间:2014-01-08 01:16:50

标签: opengl codeblocks sample

我刚开始用代码:: 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);

有谁知道如何解决这个问题?

3 个答案:

答案 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)'这是必要的。

祝其他程序编译好运。