C++ Glew LNK2019 Error

C++ Glew LNK2019 Error

本文关键字:Error LNK2019 Glew C++      更新时间:2023-10-16

每当我尝试编译和运行我的c++ SDL/glow游戏时,我都会得到链接器错误:LNK2019。我已经在MSDN中研究过了,它说它是c++文件中的C代码,没有包装在外部'C'{…} .

我正在使用Visual Studio 2015 Community和最新版本的Glew,在Windows 8.1上。

这是我一直得到的错误:

LNK2019: unresolved external symbol _imp_glClear@4 referenced in function "private void _thiscall MainGame::draw(void)" (?draw@MainGame@2AAeXXZ)
LNK2019: unresolved external symbol _imp_glClearColor@16 referenced in function "private: void _thiscall MainGame::initSystems(void)" (?initSystems@MainGame@@AAEXXZ)
LNK2019: unresolved external symbol _imp_glClearDepth@8 referenced in function "private void _thiscall MainGame::draw(void)" (?draw@MainGame@@AAEXXZ

MainGame.cpp:

#include "MainGame.h"
void fatalError(std::string errorString) {
    std::cout << "FATAL ERROR:" << errorString << std::endl;
    std::cout << "Enter any key to quit...";
    int tmp;
    std::cin >> tmp;
    SDL_Quit();
    exit(1);
}
MainGame::MainGame() {
    window = nullptr;
    width = 960;
    height = 540;
    gameState = GameState::PLAY;
}
MainGame::~MainGame() {
}
void MainGame::run() {
    initSystems();
    gameLoop();
}
void MainGame::initSystems() {
    SDL_Init(SDL_INIT_EVERYTHING);
    window = SDL_CreateWindow("Acorn", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, width, height, SDL_WINDOW_OPENGL);
    if (window == nullptr) {
        fatalError("Failed to Initialize the Window");
    }
    SDL_GLContext glContext = SDL_GL_CreateContext(window);
    if (glContext == nullptr) {
        fatalError("Failed to Initialize OpenGL");
    }
    GLenum error = glewInit();
    if (error != GLEW_OK) {
        fatalError("Failed to Initialize Glew");
    }
    SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
}
void MainGame::processInput() {
    SDL_Event sdlevent;
    while (SDL_PollEvent(&sdlevent)) {
        switch (sdlevent.type) {
        case SDL_QUIT:
            gameState = GameState::QUIT;
            break;
        }
    }
}
void MainGame::draw() {
    glClearDepth(1.0);
    glClear(GL_COLOR_BUFFER_BIT);
    glClear(GL_DEPTH_BUFFER_BIT);
    SDL_GL_SwapWindow(window);
}
void MainGame::gameLoop() {
    while (gameState != GameState::QUIT) {
        draw();
        processInput();
    }
}

MainGame.h:

#pragma once
#include <GL/glew.h>
#include <SDL/SDL.h>
#include <iostream>
#include <string>
enum class GameState {
    PLAY,
    QUIT
};
class MainGame  {
public:
    MainGame();
    ~MainGame();
    void run();
private:
    GameState gameState;
    int width, height;
    SDL_Window* window;
    void initSystems();
    void gameLoop();
    void processInput();
    void draw();
};

这个问题看起来不像与glewSDL相关,链接器无法找到的函数是opengl库的一部分。

与opengl的链接是否正确?您需要将opengl32.lib添加到附加依赖链接器,如这里所述。

我曾经在使用glow时遇到过类似的问题,但解决方案是自己编译glow .c,并链接生成的glow .o。这涉及到几行makefile等,但由于您使用不同的工具链,您需要做一些不同的事情。