GLFW 和 GLEW 的问题

问题描述 投票:0回答:1

由于我一直在学习 C 和 C++,因此我开始使用 SDL2 来可视化我正在编写的程序。我使用 Visual Studio Code,因为我喜欢它的外观,而且我不想使用 IDE,我使用命令行 (gcc/g++) 或tasks.json(通过扩展,它只是我的命令行)猜测)来编译。我刚刚开始接触 GLFW,并通过扩展使用 GLEW,这样我就可以接触到一些着色器的东西。

我的问题是双重的。我无法静态链接 GLFW 或 GLEW(当我尝试链接库时它会抛出错误),即使我使用 .dll 文件,某些函数也不可用(例如 glGetString(),我没有尝试过更多)那个)。

这是我的tasks.json 文件

{
    "version": "2.0.0",
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++.exe build active file",
            "command": "C:\\msys64\\ucrt64\\bin\\g++.exe",
            "args": [
                "-g",
                "${workspaceFolder}\\src\\**",
                "-I",
                "C:\\GLFW\\include",
                "-I",
                "C:\\GLEW\\include",
                "-L",
                "C:\\GLFW\\lib-static-ucrt",
                "-L",
                "C:\\GLEW\\lib\\Release\\x64",
                "-o",
                "${workspaceFolder}\\bin\\GLFWtest.exe",
                "-D",
                "GLEW_STATIC",
                "-lglew32s",
                "-lglfw3dll",
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "compiler: C:\\msys64\\ucrt64\\bin\\g++.exe"
        }
    ]
}

我选择了glew32s库,因为我想要静态链接,但就像我说的,它抛出了这些错误

Warning: corrupt .drectve at end of def file
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0xd): undefined reference to `__imp_wglGetProcAddress'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0xf): undefined reference to `__imp_wglGetProcAddress'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0x29): undefined reference to `__imp_wglGetProcAddress'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0x48): undefined reference to `__imp_wglGetProcAddress'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0x67): undefined reference to `__imp_wglGetProcAddress'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0xf): more undefined references to `__imp_wglGetProcAddress' follow
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0xe): undefined reference to `__imp_glGetString'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0x2de): undefined reference to `__imp_glGetIntegerv'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0x2f3): undefined reference to `__imp_glGetIntegerv'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0x300): undefined reference to `__imp_wglGetProcAddress'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0x363): undefined reference to `__imp_glGetString'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0x2d): undefined reference to `__imp_wglGetCurrentDC'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0x1c): undefined reference to `__imp_wglGetProcAddress'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0x30): undefined reference to `__imp_wglGetProcAddress'
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\GLEW\lib\Release\x64/glew32s.lib(tmp/glew_static/Release/x64/glew.obj):(.text$mn+0x5c): undefined reference to `__imp_wglGetCurrentDC'
collect2.exe: error: ld returned 1 exit status

如果我改为动态链接,我可以让它直接编译,但是当我尝试使用我之前提到的函数时,我收到此错误

C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\jpwol\AppData\Local\Temp\ccasYrmw.o: in function `main':
C:/Coding Practice/C++/GLFWtest/src/main.cpp:16:(.text+0x101): undefined reference to `glGetString'
collect2.exe: error: ld returned 1 exit status

应该提到的是,我正在运行 64 位编译器,这是我尝试编译的程序的完整代码

#include <iostream>
#include <GL/glew.h>
#include <GLFW/glfw3.h>


int main(void)
{

    glfwInit();
    GLFWwindow* window = glfwCreateWindow(1280, 720, "window", NULL, NULL);
    glfwMakeContextCurrent(window);
    if(glewInit() != GLEW_OK);
    {
        printf("Error!\n");
    }
    std::cout << glGetString(GL_VERSION) << '\n';
    glfwSetWindowShouldClose(window, false);
    fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
    
    return 0;
}

由于某种原因,它会打印“错误!”正如第 14 行所示,无论如何,但 glewGetString(GLEW_VERSION) 无论如何都可以正常工作。

我见过有人说你需要下载 GLEW 的源代码并自己编译它,我尝试过使用其他人发布的参数,但它似乎不适用于我的系统。任何帮助将不胜感激,因为从我没有制作的东西中编译源代码目前可能超出了我的范围。

c++ c compiler-errors glfw glew
1个回答
1
投票

所有缺失的符号都在

opengl32.lib
中,您没有链接到其中。 将
-lopengl32
添加到编译器命令行。

© www.soinside.com 2019 - 2024. All rights reserved.