0

我编写了一个简单的 SDL/OpenGL 程序,它显示一个简单的旋转三角形。我首先将我的应用程序作为 Win32 应用程序编译并执行,它运行良好。但是对于 x64 配置(使用 Visual 的配置管理器),编译会失败。尚未找到所有 OpenGL 方法。这是我的错误:

1>main.obj : error LNK2019: symbole externe non résolu __imp_glBegin référencé dans la fonction main
1>main.obj : error LNK2019: symbole externe non résolu __imp_glClear référencé dans la fonction main
1>main.obj : error LNK2019: symbole externe non résolu __imp_glClearColor référencé dans la fonction main
1>main.obj : error LNK2019: symbole externe non résolu __imp_glColor3ub référencé dans la fonction main
1>main.obj : error LNK2019: symbole externe non résolu __imp_glEnable référencé dans la fonction main
1>main.obj : error LNK2019: symbole externe non résolu __imp_glEnd référencé dans la fonction main
1>main.obj : error LNK2019: symbole externe non résolu __imp_glLoadIdentity référencé dans la fonction main
1>main.obj : error LNK2019: symbole externe non résolu __imp_glPopMatrix référencé dans la fonction main
1>main.obj : error LNK2019: symbole externe non résolu __imp_glPushMatrix référencé dans la fonction main
1>main.obj : error LNK2019: symbole externe non résolu __imp_glRotatef référencé dans la fonction main
1>main.obj : error LNK2019: symbole externe non résolu __imp_glScalef référencé dans la fonction main
1>main.obj : error LNK2019: symbole externe non résolu __imp_glTranslatef référencé dans la fonction main
1>main.obj : error LNK2019: symbole externe non résolu __imp_glVertex3f référencé dans la fonction main
1>main.obj : error LNK2019: symbole externe non résolu __imp_glViewport référencé dans la fonction main
1>C:\Users\VOLODIA\Desktop\SDLOpenGL64Test\x64\Debug\SDLOpenGL64Test.exe : fatal error LNK1120: 14 externes non résolus

还有我简单的 C++ 应用程序代码:

#include <iostream>
#include <SDL/SDL.h>
#include <GL/glew.h>
#include <GL/glu.h>

#define WIDTH 500
#define HEIGHT 500

static float angle = 0.0f;

static void eventListener(SDL_Event *pEvent, bool *pContinue)
{
    while (SDL_PollEvent(pEvent))
    {
        switch(pEvent->type)
        {
            case SDL_QUIT:
                *pContinue = false;
                break;
            case SDL_KEYDOWN:
                switch (pEvent->key.keysym.sym)
                {
                    case SDLK_ESCAPE:
                        *pContinue = false;
                        break;
                }
            break;
        }
    }
}

#undef main

int main(void)
{
    SDL_Event myEvent;
    bool isAlive = true;

    SDL_Init(SDL_INIT_VIDEO);
    SDL_WM_SetCaption("Simple SDL window", NULL);
    SDL_SetVideoMode(WIDTH, HEIGHT, 32, SDL_OPENGL);

    if (glewInit() == -1) {
        std::cout << "glewInit failed." << std::endl;
        getchar();
        return (EXIT_FAILURE);
    }

    while (isAlive == true)
    {
        eventListener(&myEvent, &isAlive);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

        glViewport(0, 0, WIDTH, HEIGHT);
        glEnable(GL_PROJECTION);
        glLoadIdentity();
        gluPerspective(45.0f, (float)WIDTH/(float)HEIGHT, 0.1f, 100.0f);
        gluLookAt(0.0f, 0.0f, 5.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f);

        glEnable(GL_MODELVIEW);

        glPushMatrix();

        glTranslatef(0.0f, 0.0f, 0.0f);
        glRotatef(angle, 1.0f, 1.0f, 1.0f);
        glScalef(1.0f, 1.0f, 1.0f);

        glBegin(GL_TRIANGLES);
        glColor3ub(255, 0, 0);
        glVertex3f(0.0f, 0.75f, 0.0f);
        glColor3ub(0, 255, 0);
        glVertex3f(-0.75f, 0.0f, 0.0f);
        glColor3ub(0, 0, 255);
        glVertex3f(0.75f, 0.0f, 0.0f);
        glEnd();

        angle+=1.0f;
        glPopMatrix();

        SDL_GL_SwapBuffers();
    }
    SDL_Quit();
    return (0);
}

我在以下 URL 下载了几个版本的 glew 包:

http://glew.sourceforge.net/

我将我的应用程序与 glew32.lib 链接(我想知道为什么他们用 glew32.lib 而不是 glew64.lib 调用你的 lib,这很奇怪......)但我总是有相同的消息。因此,我进行了其他研究以找到类似 glew64.lib 的内容,这次我在以下 URL 上下载了一个名为“glew64.lib”的库文件:

https://code.google.com/p/wowmodelviewer/source/browse/trunk/src/lib/Windows/64bit/glew64.lib?spec=svn492&r=492

我将它与我的应用程序相关联,但它仍然是同一件事!有没有人遇到过同样的问题?我迷路了。非常感谢您的帮助。

4

1 回答 1

2

GLEW 可以转换 OpenGL-1.1 之外的所有内容,但 OpenGL-1.1 没有提供任何内容。报告的符号是 OpenGL-1.1 的一部分opengl32.lib,除了 GLEW 之外,您还必须添加到链接库列表中:

(我想知道为什么他们用 glew32.lib 而不是 glew64.lib 调用你的库,这很奇怪......

这不是奇葩,是一致的。即使在 64 位 Windows 上,OpenGL 接口 DLL 也称为 opengl32.dll

于 2013-07-27T22:33:29.563 回答