我正在尝试使用带有g ++编译器的C ++从Scratch设置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
现在应该创建一个exe,这使我能够打开一个窗口,仅此而已。显然我做错了,因为我得到的错误消息是找不到目录GFLW。这是一个问题。
基本上我想在这里使用ChernoProject这个教程,但不必使用Visual Studio或任何其他IDE。我知道他使用的文件比我不同,并且他做了一些名为Linking
的东西但是我不明白这是如何适应我的极简主义设置的。
您将GLFW/glfw3.h
包含在编译器搜索路径(带尖括号)中,但标题位于项目的目录树中。编译器不会在项目树中搜索系统头(包括尖括号),除非您通过传递-Iinclude_directory
参数明确告诉它这样做。因此,在您的情况下,您需要包括如下所示的标头:#include "GLFW/glfw3.h"
(推荐),或添加-I.
参数以告诉编译器在当前目录中搜索系统头。
还有关于链接 - 这将是解决标题问题后的下一个问题。您的编译命令如下所示:g++ main.cpp -o WindowApp.exe
并且不包含任何要链接的库。如果你正在使用MinGW,它必须包含以下参数,用于静态链接到OpenGL和GLFW3:-lmingw32 -lglfw3 -lopengl32 -lgdi32 -luser32
。
例如,我对此项目的首选设置是:
-ProjectDirectory
-bin
-glfw3.dll (if you want to use dll)
-include
-GLFW
-glfw3.h
-glfw3native.h
-lib
-libglfw3.a
-libglfw3dll.a (if you want to use dll)
-src
-main.cpp
-build.bat
使用build.bat的以下内容(将"Your actual path to g++"
更改为系统中g ++的路径,或者如果它位于路径变量中,则将其设置为"g++"
):
@ECHO OFF
REM Path to g++
SET G="Your actual path to g++"
SET OBJECTS=
REM Recursive every .cpp file in ./src
FOR /R "./src" %%a IN (*.cpp) DO (
CALL SET OBJECTS=%%OBJECTS%% "%%a"
)
@ECHO ON
%G% %OBJECTS% -obin/a.exe -Iinclude -Llib -lmingw32 -lglfw3 -lopengl32 -lgdi32 -luser32