c++ - GLEW 链接错误。错误 LNK2019

标签 c++ c visual-studio-2013 glew freeglut

我使用的是 Visual Studio 2013,是 C++ 的新手。我安装了 GLEW 和 freeglut。我尝试构建我的文件“main.c”,我收到了:

1>------ Build started: Project: testGlut1, Configuration: Debug Win32 ------
1>  main.c
1>main.obj : error LNK2019: unresolved external symbol __imp__glewInit@0 referenced function _Initialize
1>main.obj : error LNK2019: unresolved external symbol __imp__glewGetErrorString@4 referenced in function _Initialize
1>C:\Users\User\documents\visual studio 2013\Projects\testGlut1\Debug\testGlut1.exe : fatal error LNK1120: 2 unresolved externals
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

我通读了a similar issue ,但是该解决方案对我不起作用,事实上,没有任何改变。此外,我只有 2 个 Unresolved external 问题,而上述问题显示有 16 个 Unresolved external 问题。为什么?为什么将这两个错误隔离开来?

我的程序的源代码:

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <GL/glew.h>
#include <GL/freeglut.h>
#define WINDOW_TITLE_PREFIX "Chapter 1"

int CurrentWidth = 800,
CurrentHeight = 600,
WindowHandle = 0;

unsigned FrameCount = 0;

void Initialize(int, char*[]);
void InitWindow(int, char*[]);
void ResizeFunction(int, int);
void RenderFunction(void);
void TimerFunction(int);
void IdleFunction(void);

int main(int argc, char* argv[])
{
    Initialize(argc, argv);

    glutMainLoop();

    exit(EXIT_SUCCESS);
}

void Initialize(int argc, char* argv[])
{
    GLenum GlewInitResult;

    InitWindow(argc, argv);

    GlewInitResult = glewInit();

    if (GLEW_OK != GlewInitResult) {
        fprintf(
            stderr,
            "ERROR: %s\n",
            glewGetErrorString(GlewInitResult)
            );
        exit(EXIT_FAILURE);
    }

    fprintf(
        stdout,
        "INFO: OpenGL Version: %s\n",
        glGetString(GL_VERSION)
        );

    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
}

void InitWindow(int argc, char* argv[])
{
    glutInit(&argc, argv);

    glutInitContextVersion(4, 0);
    glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
    glutInitContextProfile(GLUT_CORE_PROFILE);

    glutSetOption(
        GLUT_ACTION_ON_WINDOW_CLOSE,
        GLUT_ACTION_GLUTMAINLOOP_RETURNS
        );

    glutInitWindowSize(CurrentWidth, CurrentHeight);

    glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);

    WindowHandle = glutCreateWindow(WINDOW_TITLE_PREFIX);

    if (WindowHandle < 1) {
        fprintf(
            stderr,
            "ERROR: Could not create a new rendering window.\n"
            );
        exit(EXIT_FAILURE);
    }

    glutReshapeFunc(ResizeFunction);
    glutDisplayFunc(RenderFunction);
    glutIdleFunc(IdleFunction);
    glutTimerFunc(0, TimerFunction, 0);
}

void ResizeFunction(int Width, int Height)
{
    CurrentWidth = Width;
    CurrentHeight = Height;
    glViewport(0, 0, CurrentWidth, CurrentHeight);
}

void RenderFunction(void)
{
    ++FrameCount;

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glutSwapBuffers();
    glutPostRedisplay();
}

void IdleFunction(void)
{
    glutPostRedisplay();
}

void TimerFunction(int Value)
{
    if (0 != Value) {
        char* TempString = (char*)
            malloc(512 + strlen(WINDOW_TITLE_PREFIX));

        sprintf(
            TempString,
            "%s: %d Frames Per Second @ %d x %d",
            WINDOW_TITLE_PREFIX,
            FrameCount * 4,
            CurrentWidth,
            CurrentHeight
            );

        glutSetWindowTitle(TempString);
        free(TempString);
    }

    FrameCount = 0;
    glutTimerFunc(250, TimerFunction, 1);
}

这是我的附加依赖项:

My additional Dependencies

这是 MyDocuments 中的 Debug 文件夹:

Debug_folder

最佳答案

链接文件的操作系统版本之间根本不兼容。我认为该过程正在使用 SysWOW64 搜索 GLUT 和 GLEW 的 DLL 文件,因为我的操作系统是 Windows 64 位。不管怎样,我用了这个工具,Dependecy Walker 2.2 , 以跟踪以前创建的 .exe 文件并了解到我的操作系统正在搜索 C:\Windows\System32 以查找 DLL 文件。这改变了一切,令人恼火。出于对搜索一天半以上答案的沮丧,我进入了 C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86 并交换了 glew32.lib (64 -bit) 用于 glew32.lib(32 位),瞧,我可以毫无错误地运行我的程序。由于我不是专家,甚至没有实践过 C 编程,所以我只能说这是问题的临时解决方案。我不确定为什么程序搜索 C:\Windows\System32 而不是 C:\Windows\SysWOW64。但是,我希望这个解决方案能帮助那些在尝试使用 GLEW、GLUT 和 Microsoft Visual Studio 时遇到神秘链接器错误消息的人。

关于c++ - GLEW 链接错误。错误 LNK2019,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21227553/

相关文章:

c++ - 通过使用仿函数数组摆脱 switch case

c++ - 动态内存分配问题

visual-studio - CUDA Toolkit 7.5 可以在带有 VS 2013 Platform Toolkit 的 Visual Studio 2015 上使用吗

c - header 看不到宏

c - 给定一个OID,如何找到对应的MIB?

c# - 无法进入或中断在 Linq 查询/表达式中调用的方法

c++ - 不能为数组指定显式初始值设定项

c++ - 取代表开始/结束的数字对,并消除重叠

c++ - 如何访问单独类中的私有(private)构造函数?

c++ - 有没有在 C/C++ 代码中使用 mbind 的例子?