繁体   English   中英

这个 linker 错误是什么(SDL2 在 Windows 上使用 vscode)?

[英]What is this linker error about (SDL2 using vscode on windows)?

尝试使用 SDL2 构建我的 c++ 项目,但它给了我这个错误,即使我认为我正确链接了所有内容:

C:\Users\spr\AppData\Local\Temp\ccW5VQkj.o:main.cpp:(.text+0xbe): undefined reference to ` `RenderWindow::RenderWindow(char const*, int, int)'
C:\Users\spr\AppData\Local\Temp\ccW5VQkj.o:main.cpp:(.text+0xf9): undefined reference to ` `RenderWindow::cleanUp()'
collect2.exe: error: ld returned 1 exit status

我是这样建造的:

all:
    g++ -Isrc/include -Lsrc/lib -o build/main src/main.cpp -lmingw32 -lSDL2main -lSDL2 -lSDL2_image

这是 main.cpp 的代码:

#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <iostream>

#include "custom/RenderWindow.hpp"

int main(int argc, char* args[])
{
    if (SDL_Init(SDL_INIT_VIDEO) > 0)
        std::cout << "HEY.. SDL_Init HAS FAILED. SDL_ERROR: " << SDL_GetError() << std::endl;

    if (!(IMG_Init(IMG_INIT_PNG)))
        std::cout << "IMG_init has failed. Error: " << SDL_GetError() << std::endl;

    RenderWindow window("GAME v1.0", 1280, 720);

    bool gameRunning = true;

    SDL_Event event;

    while (gameRunning)
    {
        // Get our controls and events
        while (SDL_PollEvent(&event))
        {
            if (event.type == SDL_QUIT)
                gameRunning = false;
        }
    }

    window.cleanUp();
    SDL_Quit();

    return 0;
}

渲染窗口.hpp:

#pragma once
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>

class RenderWindow 
{
public:
    RenderWindow(const char* p_title, int p_w, int p_h);
    void cleanUp();
private:
    SDL_Window* window;
    SDL_Renderer* renderer;
};

和 renderwindow.cpp

#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <iostream>

#include "custom/RenderWindow.hpp"

RenderWindow::RenderWindow(const char* p_title, int p_w, int p_h)
    :window(NULL), renderer(NULL)
{
    window = SDL_CreateWindow(p_title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, p_w, p_h, SDL_WINDOW_SHOWN);

    if (window == NULL)
    {
        std::cout << "Window failed to init. Error: " << SDL_GetError() << std::endl;
    }

    renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
}

void RenderWindow::cleanUp()
{
    SDL_DestroyWindow(window);
}

我正在尝试遵循 c++ 上的 codergophers 10 部分教程(但我使用的是 vscode 而不是 sublime)。 为了链接,我需要做些不同的事情吗? 我是 c++ 编程的新手。

在不包含renderwindow.cpp的情况下构建它,所以我将构建它的方式更改为g++ -Isrc/include -Lsrc/lib -o build/main src/*.cpp -lmingw32 -lSDL2main -lSDL2 -lSDL2_image所以它包含所有.cpp文件.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM