【问题标题】:OpenGL Linking error? Unresolved external glCreateShader()OpenGL链接错误?未解决的外部 glCreateShader()
【发布时间】:2013-01-28 19:38:08
【问题描述】:

我正在开发一个 OpenGL 程序来测试着色器并尝试编译它们。但是,对 glCreateShader() 的调用(以及其他着色器调用,如 glDeleteShader)会出现以下错误:

(此错误来自 glCreateShader())

Error   3   error LNK2001: unresolved external symbol _pglCreateShader  

我正在使用 Visual Studio 2012 和 Windows 7。我有一张最新的 nvidia 卡,包括最新的驱动程序,所以不能是我的 OpenGL 版本。

我将 glTools 头文件用于 OpenGL Superbible 第 4 版的所有辅助函数。不确定使用这些文件是否有错误?

我会发布我的包含内容,以防这也有任何帮助。

#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 以包含“gl/glew.h”而不是“glee.h”,在我的链接器中添加了一个 ;glew32.lib 选项,并在进入主循环之前添加了 glewInit()。我还将 GLEW 库、dll 和包含添加到适当的文件夹中,所有功能都可以正常工作! :)

【问题讨论】:

  • glGetString(GL_VERSION) 返回什么?如果低于 2.0 版本,则 openGL 版本将不支持创建着色器。我不确定 glTools 标头包含什么。它或它的任何包含是否包含 glCreateShader() 的声明?

标签: c++ windows opengl linker shader


【解决方案1】:

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

这样做by hand 是……烦人。

【讨论】:

  • 好的,所以如果我包含 Glew 标头并链接到 glew.lib,错误应该会自动消失吗?这背后的逻辑是什么?只是为了好奇? :)
  • 您必须做的不止这些,请阅读 GLEW 文档。创建/激活 GL 上下文后,您必须 glewInit()。并且不要忘记对您要使用的功能进行扩展/版本检查!
  • 谢谢!这让我对幕后的实际运作方式有了一些了解。
  • 感谢 GLEW 解决了 K 问题。感谢您的帮助,不胜感激!
【解决方案2】:

在 Windows 上,您使用 WGL,而在使用 WGL 时,您不能直接链接到 GL 函数。你得到的所有功能都是these;您应该使用wglGetProcAddress(如here)动态获取指向您想要的GL入口点的指针,然后才能使用它们。

基本上,如果您手动加载 GL 入口点函数指针,Windows 上的 OpenGL 就是一个 PITA。使用实用程序库为您获取指针要容易得多,例如GLEW

【讨论】:

  • 用一些背景理论来解释事情。谢谢!我会研究一下 glew 看看有什么帮助:)
猜你喜欢
  • 2012-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-14
  • 2014-04-29
  • 1970-01-01
  • 2020-10-15
相关资源
最近更新 更多