我正在使用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 库,但我仍然得到相同的结果。
我已经解决了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