我正在关注this OpenGL教程,但我仍然坚持链接库。
#define GLEW_STATIC
#include <glew.h>
#include <glfw3.h>
#include <thread>
typedef void (*GENBUFFERS) (GLsizei, GLuint*);
int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 2);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_RESIZABLE, GL_FALSE);
GLFWwindow* window = glfwCreateWindow(800, 600, "OpenGL", nullptr, nullptr);
glfwMakeContextCurrent(window);
while (glfwWindowShouldClose(window))
{
glfwSwapBuffers(window);
glfwPollEvents();
}
GENBUFFERS glGenBuffers = (GENBUFFERS) wglGetProcAddress("glGenBuffers");
GLuint buffer;
glGenBuffers(1, &buffer);
glfwTerminate();
}
由于某种原因,函数wglGetProcAddress
未定义。这些是我链接的库:glew32.lib,glew32s.lib,glfw3.lib,opengl32.lib。
MSDN says,wglGetProcAddress
包含在opengl32.lib中。我做错了什么?
错误1错误C3861:&#39; wglGetProcAddress&#39;:未找到标识符e:\ workspaces \ visual studio \ learningopengl1 \ learningopengl1 \ main.cpp 32 1 LearningOpenGl1
2智能感知:标识符&#34; wglGetProcAddress&#34;未定义e:\ Workspaces \ Visual Studio \ LearningOpenGl1 \ LearningOpenGl1 \ main.cpp 34 41 LearningOpenGl1
答案 0 :(得分:4)
这不是链接器错误,这是一个编译器错误 - 所以你链接的库在这个阶段根本不重要。
您的编译器告诉您它不知道wglGetProcAddress
,因为它从未看到过此声明。您的编译器也不应该知道GENBUFFERS
,因为此类型也未定义。在official glext.h
file中,您要查找的类型称为PFNGLGENBUFFERS
。
如果您确实想要手动使用wgl
API,则可能应该包含GL/gl.h
以及最新的glext.h
并使用正确的类型名称。
对我来说,最大的问题是:你在这里想要做什么?您包括glew.h
,这是一个库,其唯一目的是为您执行GL函数指针查询。您需要做的就是致电glewInit()
并完成您的工作(好吧,不要忘记在核心资料中设置glewExperimental=GL_TRUE
,因为GLEW已经被破坏并赢得了奖励。在核心配置文件中没有这个工作)。无需手动弄乱wglGetProcAddress()
。
此外,您还使用GLFW。因此,如果您手动想要查询函数指针,那么最好使用GLFW对平台特定指针查询API的抽象,这将是glfwGetProcAddress()
,并且应该已经声明 - 再次不需要弄乱wglGetProcAddress()
。