c++ 编译时找不到glad标头

klr1opcd  于 2023-03-14  发布在  其他
关注(0)|答案(1)|浏览(325)

我试图在GLFW中创建一个窗口,一切都按预期工作,直到我重置我的PC(重置的原因与此问题无关)。我有我的项目存储在一个单独的驱动器上,所以它是未修改的,我重新安装了minGW和GLFW。但现在,每次我试图编译我的项目,它返回:main.cpp和glad. c的fatal error: glad/glad.h: No such file or directory,尽管它位于指定的文件夹中。
我用g++ -o windows.exe main.cpp glad.c -Linclude -lopengl32 -lglfw3 -lgdi32编译。
Main.cpp:

#define GLFW_INCLUDE_NONE
#include "glad/glad.h"
#include "GLFW/glfw3.h"
#include <stdio.h>
using namespace std;

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) {
    if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS) {
        glfwSetWindowShouldClose(window, GLFW_TRUE);
    }
}

int main() {
    //initializes glfw
    if (!glfwInit()) {
        return -1;
    }

    glfwSetErrorCallback(error_callback);
    
    //tells GLFW that this is opengl 3.3
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    
    //makes the window
    GLFWwindow * window = glfwCreateWindow(1000, 1000, "Test", NULL, NULL);
    //error checks the window
    if (!window) {
        return -1;
    }

    //makes the context in the current window
    glfwMakeContextCurrent(window);
    
    //loads glad
    gladLoadGL();

    glViewport(0, 0, 1000, 1000);

    glfwSetKeyCallback(window, key_callback);

    glfwSwapInterval(1);
    
    while (!glfwWindowShouldClose(window)) {
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    glfwDestroyWindow(window);
    
    glfwTerminate();
    return 0;
}

文件夹结构:

我试过将include预处理器指令改为#include "include/glad/glad.h",试过将include文件夹中的所有子文件夹移到主项目文件夹中,试过将引号改为尖括号,试过重新安装minGW和GLFW。我可能安装错了minGW和GLFW吗?如果没有,问题是什么?

s5a0g9ez

s5a0g9ez1#

首先确保使用的路径中没有空格字符(如空格),包括以下位置:编译器工具(gcc.exe)、源代码、使用的依赖项源代码(很高兴您使用)。
接下来,最好单独构建依赖项(如果您很高兴可以使用cmake -GNinja来配置它,然后使用ninja来构建它)。
最后,我建议将编译器和链接器的步骤分割成单独的命令,看起来像这样:

g++ -c -o main.o main.cpp -Iglad/include
g++ -o windows.exe main.o -Lglad/lib -lglad -lopengl32 -lglfw3 -lgdi32

在上面的示例中,如果需要,可以将glad/替换为绝对路径。
在您的问题中,您没有指定-I编译器标志来告诉编译器在哪里可以找到头文件,并且您使用了-L put将其指向include文件夹,而不是通常存放库的lib文件夹。
请注意,-l文件将库名称作为参数,它是库文件名的一部分,不带前导lib和尾随.a(对于共享库,则为.dll.a)。

相关问题