C++ 调用glewInit()会导致不调用主函数
我正在尝试使用GLFW和GLEW。目前我的代码正常工作,我看到一个带有三角形的窗口:C++ 调用glewInit()会导致不调用主函数,c++,glfw,glew,C++,Glfw,Glew,我正在尝试使用GLFW和GLEW。目前我的代码正常工作,我看到一个带有三角形的窗口: #define GLEW_STATIC #include <GL/glew.h> #include <GLFW/glfw3.h> #include <stdlib.h> #include <time.h> #include "constants.h" int main(void) { GLFWwindow* window;
#define GLEW_STATIC
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <stdlib.h>
#include <time.h>
#include "constants.h"
int main(void) {
GLFWwindow* window;
if (!glfwInit()) {
glfwTerminate();
return -1;
}
/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Window", NULL, NULL);
if (!window) {
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
glfwSwapInterval(1);
// if (glewInit() != GLEW_OK) {
// fprintf(stderr, "failure");
// return -1;
// }
glfwSetInputMode(window, GLFW_STICKY_KEYS, GL_TRUE);
while (glfwGetKey(window, GLFW_KEY_ESCAPE ) != GLFW_PRESS && glfwWindowShouldClose(window) == 0) {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex2f(0, 0);
glVertex2f(0, 1);
glVertex2f(1, 0);
glEnd();
glfwSwapBuffers(window); /* Swap front and back buffers */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
程序以静默方式退出。我用断点确认,main
函数甚至没有被调用。如果有帮助,下面是我的编译命令:
g++ -g main.cpp -I\glfw-3.3.2\include -I\glew-2.1.0\include -L\glfw-3.3.2\lib-mingw-w64 -L\glew-2.1.0\lib\Release\x64 -lglfw3 -lgdi32 -lopengl32 -luser32 -lshell32 -lglew32 -o main.exe
我一辈子都搞不懂这个。我正在调用
glewInit
在创建OpenGL窗口之后,我正在导入glew
之前的glfw
。我做错了什么?在main之前崩溃是因为静态初始化还是动态库
看起来您是在windows上,在这种情况下,glew
release文件包含两个库glew32.lib
和glew32s.lib
如果要针对非静态链接,请尝试-lglew32s
。第一个是搜索.dll的存根,通常位于glew/bin
文件夹中,您必须使用main.exe
将其复制到工作目录。如果选择此方式,请删除GLEW_STATIC
为防止将来出现错误,请添加glewExperimental=GL\u TRUE
在glewInit之前的某个地方。它在某些驱动程序上启用OpenGL 3.3+功能
至于为什么它现在可以工作,首先存在扩展加载库的全部原因是默认驱动程序只包含OpenGL 1.x功能。所有较新的函数必须在运行时直接从GPU提供的
.dll
驱动程序加载,使用dllopen()
和GetProcAddress()
,这正是这些库为您所做的。这就是为什么大多数较新的函数实际上都实现为宏(包装函数指针)。也就是说,您没有使用任何新函数(您真的应该这样做),因此一切都正常工作。使用-lglew32s
给了我一系列错误,例如未定义对\u imp\u wglGetProcAddress'`的引用。我认为glew的麻烦比它的价值还多,我只想用glew。谢谢你的帮助@multitaskPro对此不确定,您可以链接opengl32
。是的,我也极力推荐glad
,一个标题,一个源代码,我从来没有遇到过任何问题。
g++ -g main.cpp -I\glfw-3.3.2\include -I\glew-2.1.0\include -L\glfw-3.3.2\lib-mingw-w64 -L\glew-2.1.0\lib\Release\x64 -lglfw3 -lgdi32 -lopengl32 -luser32 -lshell32 -lglew32 -o main.exe