我正在尝试使用C和g编译器从头开始设置一个OpenGL API。目前,我正在尝试使用GLFW获得一个简单的窗口系统,但当我编译该程序时,它似乎找不到GFLW目录。
我试图从头开始做这件事,所以我不会使用任何像Visual Studio这样的IDE,我所做的一切都是用Notepad++编写的,命令都是使用Git bash编写的。我想这样做,我知道这是一项额外的工作,但这就是我想要实现的。
我的项目文件夹如下所示:
-TestProject
-main.cpp
-GFLW
-gflw3.h
在我的main.cpp文件中,我复制并粘贴了GFLW文档中的代码:
# include <GLFW/glfw3.h>
int main(void)
{
GLFWwindow* window;
/* Initialize the library */
if (!glfwInit())
return -1;
/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
/* Make the window's context current */
glfwMakeContextCurrent(window);
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
glClear(GL_COLOR_BUFFER_BIT);
/* Swap front and back buffers */
glfwSwapBuffers(window);
/* Poll for and process events */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
要编译该程序,我使用带有以下命令的git bash:
g++ main.cpp -o WindowApp.exe
这现在应该创建一个可执行文件,使我能够打开一个窗口,没有更多也没有更少。显然我做错了什么,比如我收到错误消息目录gflw找不到。所以这是一个问题。
从本质上讲,我希望在ChernoProject阅读本教程,但不必使用Visual Studio或任何其他IDE。我知道他使用的文件与我不同,他做的是Linking
,但我不明白这如何适应我这里的极简主义设置。
1条答案
按热度按时间1yjd4xko1#
您包含了相对于编译器搜索路径的
GLFW/glfw3.h
(带有尖括号),但头文件位于项目的目录树中。编译器不会在项目树中搜索系统头(包含在尖括号中),除非您通过传递-Iinclude_directory
参数明确告诉它这样做。因此,在您的例子中,您需要包括这样的头文件:#include "GLFW/glfw3.h"
(推荐),或者添加-I.
参数来告诉编译器在当前目录中搜索系统头文件。另外,关于链接--这将是解决标题问题后的下一个问题。您的编译命令如下所示:
g++ main.cpp -o WindowApp.exe
,并且不包含任何要链接的库。如果您使用的是MinGW,则它必须包含以下参数,以便静态链接到OpenGL和GLFW3:-lmingw32 -lglfw3 -lopengl32 -lgdi32 -luser32
。例如,我对此项目的首选设置是:
具有以下Build.bat内容(在您的系统上将
"Your actual path to g++"
更改为g++的路径,或者仅将其设置为"g++"
(如果它在PATH变量中)):