我试图在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吗?如果没有,问题是什么?
1条答案
按热度按时间s5a0g9ez1#
首先确保使用的路径中没有空格字符(如空格),包括以下位置:编译器工具(gcc.exe)、源代码、使用的依赖项源代码(很高兴您使用)。
接下来,最好单独构建依赖项(如果您很高兴可以使用
cmake -GNinja
来配置它,然后使用ninja
来构建它)。最后,我建议将编译器和链接器的步骤分割成单独的命令,看起来像这样:
在上面的示例中,如果需要,可以将
glad/
替换为绝对路径。在您的问题中,您没有指定
-I
编译器标志来告诉编译器在哪里可以找到头文件,并且您使用了-L
put将其指向include
文件夹,而不是通常存放库的lib
文件夹。请注意,
-l
文件将库名称作为参数,它是库文件名的一部分,不带前导lib
和尾随.a
(对于共享库,则为.dll.a
)。