OpenGL连接错误?未解决的外部glCreateShader()。

3
我正在开发一个OpenGL程序来测试着色器,并尝试编译它们。然而,调用glCreateShader()(以及其他着色器调用,如glDeleteShader)会出现以下错误:
(此错误来自glCreateShader())
Error   3   error LNK2001: unresolved external symbol _pglCreateShader  

我正在使用Visual Studio 2012和Windows 7。拥有最新的NVIDIA显卡,包括最新的驱动程序,所以不可能是我的OpenGL版本的问题。
我正在使用glTools头文件来使用OpenGL Superbible第四版中所有的帮助函数。不确定使用这些文件是否存在错误?
为了帮助解决问题,我会发布我的包含文件。
#pragma once

#include <Windows.h>

// Basic C++ includes
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <vector>
using namespace std;

// OpenGL specific and GUI includes
#include "shared/gltools.h"
#include "shared/math3d.h"
#include <SOIL.h>

以及链接器选项:

soil.lib;opengl32.lib;gltools.lib;


好的,问题已经得到解决,感谢答案:

我编辑了我的glTools.h文件,将'glee.h'替换为'gl/glew.h',在链接器中添加了';glew32.lib'选项,并在进入主循环之前添加了glewInit()。 我还将GLEW libs,dlls和includes添加到了适当的文件夹中,所有函数都像应该的那样工作了! :)


也许相关:http://stackoverflow.com/questions/4625603/glsl-unresolved-external-on-visual-c - Zeta
glGetString(GL_VERSION)返回什么? 如果版本低于2.0,则openGL版本将不支持着色器的创建。我不确定glTools头文件包含什么。它或其中任何一个包含是否声明了glCreateShader()? - Weaver
2个回答

3

获取GLEW的副本以处理扩展加载。

手动加载是...很烦人的。


好的,如果我包含Glew头文件并链接到glew.lib,那么错误应该会自动消失?这背后的逻辑是什么?只是出于好奇吗? :) - Joey Dewd
1
你需要做更多的事情,阅读GLEW文档。在创建/激活GL上下文后,你必须调用glewInit()函数。并且不要忘记检查你想要使用的功能的扩展/版本! - genpfault
谢谢!这让我对事情在幕后的实际运作有了相当深入的了解。 - Joey Dewd
1
感谢 GLEW 的帮助,K 问题已经解决。非常感激您的帮助! - Joey Dewd

2
在 Windows 上,您使用 WGL,在使用 WGL 时,不能直接链接 GL 函数。您获得的所有函数都是 这些;在使用它们之前,您应该使用 wglGetProcAddress(如 此处 所示)动态获取指向所需 GL 入口点的指针。
基本上,如果您手动加载 GL 入口点函数指针,则在 Windows 上使用 OpenGL 会非常麻烦。最好使用实用程序库来为您获取指针,例如 GLEW

那解释了一些背景理论。谢谢!我会研究glew并看看它如何帮助 :) - Joey Dewd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接