使用glad库时出现Msvc命令编译错误

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

我正在使用glfw3和glad库。问题是我的 cl.exe 编译器没有按照我想要的方式进行编译。

这是我的main.cpp:

#define GLFW_INCLUDE_NONE
#include <iostream>
#include <Windows.h>
#include "C:\msvc64\include\GLFW\glfw3.h"
#include "C:\msvc64\include\GLFW\glfw3native.h"
#include "C:\msvc64\include\glad\gl.h"


void error_callback(int error, const char* description)
{
    fprintf(stderr, "Error: %s\n", description);
}

static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    // Key call backs.
}

void drawSquare() {
    glColor3f(0.0, 1.0, 1.0);
    glBegin(GL_POLYGON);
    glVertex2f(0.5, 0.5);
    glVertex2f(-0.5, 0.5);
    glVertex2f(-0.5, -0.5);
    glVertex2f(0.5, -0.5);
    glEnd();
}

int WinMain(HINSTANCE hInst, HINSTANCE hInstPrev, PSTR cmdline, int cmdshow) {
    if (!glfwInit())
    {
        return MessageBox(NULL, L"failed to initialize glfw", L"Error", 0);
    };

    glfwSetErrorCallback(error_callback);

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    GLFWwindow* window = glfwCreateWindow(640, 480, "My Title", NULL, NULL);
    if (!window)
    {
        glfwTerminate();
        exit(EXIT_FAILURE);
        return MessageBox(NULL, L"Failed to create window", L"Error", 0);
    };

    glfwSetKeyCallback(window, key_callback);

    // Make the OpenGL context current
    glfwMakeContextCurrent(window);

    int width, height;
    glfwGetFramebufferSize(window, &width, &height);
    glViewport(0, 0, width, height);
    double time = glfwGetTime();

    while (!glfwWindowShouldClose(window)) {
        // Main loop
        glClear(GL_COLOR_BUFFER_BIT);
        drawSquare();
        glfwSwapBuffers(window);
        glfwPollEvents();

        // Check if the user attempted to close the window
        if (glfwWindowShouldClose(window)) {
            break; // Exit the loop
        }

        // Other application logic goes here
    }

    // Clean up and terminate GLFW
    glfwTerminate();

    return 0;
}

您看到的那些库(msvc64)是我制作的库,以便我可以更轻松地使用 cl.exe。我不认为问题出在 glfw3 上,因为当我使用 glfw3 运行编译时,它的编译就像一个魅力。

我使用的命令行代码是:

CL.exe /c /IC:\msvc64\include\GLFW /IC:\msvc64\include\ /Zi /nologo /W3 /WX- /diagnostics:column /sdl /O2 /Oi /GL /D NDEBUG /D _CONSOLE /D _UNICODE /D UNICODE /Gm- /EHsc /MD /GS /Gy /fp:precise /Zc:wchar_t /Zc:forScope /Zc:inline /permissive- /Fo"C:\Users\name\Desktop\GameMake\\" /Fd"C:\Users\name\Desktop\GameMake\vc143.pdb" /external:W3 /Gd /TP /FC /errorReport:prompt main.cpp "C:\msvc64\src\gl.c"
main.cpp
gl.c
C:\msvc64\src\gl.c(2302,5): warning C4551: function call missing argument list.

我无法使用链接(link.exe)将其转换为 .exe,因为我需要使用 .obj 和从 cl.exe 创建的其他文件

link.exe /ERRORREPORT:PROMPT /OUT:"C:\Users\name\Desktop\GameMake\game.exe" /NOLOGO /LIBPATH:C:\msvc64\lib glfw3.lib OpenGL32.lib User32.lib gdi32.lib shell32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /MANIFEST /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /manifest:embed /DEBUG /PDB:"C:\Users\name\Desktop\GameMake\game.pdb" /SUBSYSTEM:WINDOWS /OPT:REF /OPT:ICF /LTCG:incremental /LTCGOUT:"C:\Users\name\Desktop\GameMake\game.iobj" /TLBID:1 /DYNAMICBASE /NXCOMPAT /IMPLIB:"C:\Users\las-nawzad\Desktop\GameMake\game.lib" 
/MACHINE:X64 C:\Users\las-nawzad\Desktop\GameMake\main.obj

我希望代码能够顺利编译,并将 .cpp 转换为 exe 代码。

我尝试查看gl.c(来自glad/src)和我看到的第2302行第5列

GLAD_UNUSED(glad_gl_has_extension);
我很困惑,因为我不知道为什么那条线会是错误的。我也尝试从 https://gen.glad.sh/ generated/tmpy5zlowskglad/ 下载 happy 库,但我仍然得到相同的结果。

c++ opengl visual-c++ glfw glad
1个回答
0
投票

我已经解决了opengl问题。问题出在 cl 中,我应该还包括了 happy 文件夹和 KHR 文件夹,这就是问题所在,那么如果你这样做,你会注意到链接,你会得到一个错误,因为 cl 也会生成一个glad.obj,你可以使用它必须将main.obj与glad.obj结合起来才能工作.exe 不仅您需要gl.c、gl.h、glad.h 和glad.c,它们可以从glad 生成器下载。您将在代码中包含 gl.h (glad/include/gl.h) 并使用glad.c 进行编译(我不知道gl.c 和glad.h 是否有必要)。然而,我对那些试图解决我的错误的人表示歉意,因为我一开始就应该知道这一点。如果您有任何与我类似的错误,请告诉我,我可以尝试解决它们

真诚地,Letrea

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