游戏开发论坛

 找回密码
 立即注册
搜索
查看: 10917|回复: 6

新手,调试一下午,求助glGenBuffers()函数问题。。

[复制链接]

3

主题

11

帖子

57

积分

注册会员

Rank: 2

积分
57
发表于 2013-3-12 20:58:56 | 显示全部楼层 |阅读模式
在自学OpenGL,看的是红皮书第七版,其中有个例子用到了glGenBuffers()函数,之前的一些例子可以运行
#include<windows.h>
#include<Gl/glew.h>
#include<Gl/glut.h>
我用codebolck+MinGW+opengl
按照网上的的下载了glew并配置
使用glew中的glewinfo查看如下:
GL_VERSION_1_5:                                                OK
---------------
  glBeginQuery:                                                OK
  glBindBuffer:                                                OK(这个应该是说支持这个函数吧)
  glBufferData:                                                OK
  glBufferSubData:                                             OK
  glDeleteBuffers:                                             OK
  glDeleteQueries:                                             OK
  glEndQuery:                                                  OK
  glGenBuffers:                                                OK
使用glew中的visualinfo查看如下:
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GT 240M/PCIe/SSE2
OpenGL version string: 3.3.0(这个的意思是我的OpenGL的版本吧??)
按道理应该可以使用这个函数啊
之后还是不行,又装了vs2010,并按照网上的配置了一遍,还是不行
总结发现是这样的,包含头文件glew.h的话
g++提示undefined reference to `_imp____glewGenBuffers'
vs提示error LNK2001: unresolved external symbol __imp____glewGenBuffers
因该是链接错误,但是我在linker设置中添加了opengl32.lib,glu32.lib,glut32.lib
不包含glew.h的话
g++提示:error: 'glGenBuffers' was not declared in this scope|
vs提示:error C3861: 'glGenBuffers': identifier not found
没有声明,说明没有这个函数可用
弄了一下午,到现在还不知道该怎么弄,求大神赐教。。。
该放入的dll文件和lib文件我也都放进去了
最后实在不知道该怎么弄了
中途在虚拟机中用ubuntu12.04中的codeblock也试过,还是不行,情况类似。。

1

主题

18

帖子

4834

积分

论坛元老

Rank: 8Rank: 8

积分
4834
发表于 2013-3-12 21:04:04 | 显示全部楼层
需要连结 glew.lib

3

主题

11

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2013-3-12 21:17:10 | 显示全部楼层
我添加上glew.lib说找不到
然后我添加上glew32.lib
提示:error LNK2001: unresolved external symbol __imp____glewGenBuffers
opentest1.exe :fatal error LNK1120: 1 unresolved externals

1

主题

18

帖子

4834

积分

论坛元老

Rank: 8Rank: 8

积分
4834
发表于 2013-3-12 21:52:44 | 显示全部楼层
我现在不是在Windows系统上,所以无法确认glew,记忆里如果是采用static library的方式的话:在Win32上会叫glew32.lib,在Linux上叫libglew.a,在MacOSX上为libGLEW.a。
codeblock+glew我没有使用经验,所以也不清楚问题的徵结在出在那?
就错误讯息来看它是找不到glewGenBuffers这个外部函式来连结。而这个函式是glew内提供的。
程序内有调用glewInit这个函式吗?
除了这个函式之外,如果调用别的函式也会出现类似的错误反应吗?

3

主题

11

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2013-3-13 10:15:14 | 显示全部楼层
嗯,调用glBindBuffer函数也是这个问题
我在main函数中加入了glewInit同样这个函数也是提示这个错误
好像OpenGL1.5以后的函数都不能用,我查看我的版本好像是3.3的啊
然后我再网上下载了glew1.9,把glew32.dll复制到Windows/system32和windows/syswow64下
把其中的所有头文件也都放进gl下了,所有的lib文件放到了wingw下的lib下了
可是还是不行,不知道为什么

1

主题

18

帖子

4834

积分

论坛元老

Rank: 8Rank: 8

积分
4834
发表于 2013-3-13 13:32:41 | 显示全部楼层
看来你的程序完全没有连结到glew的库。
你直接把glew.c拉进专案里,这样应该直接能使用。

3

主题

11

帖子

57

积分

注册会员

Rank: 2

积分
57
 楼主| 发表于 2013-3-13 20:33:14 | 显示全部楼层
哈哈哈,终于解决了, 我把glew.c拉进去不行,每个函数都出现重定义,不知道为什么,我把头文件去了也不行,最后我在虚拟机里重装了一下ubuntu12.04,然后在网上找了怎么配置
sudo apt-get install build-essential
sudo apt-get install libgl1-mesa-dev
sudo apt-get install libglu1-mesa-dev
sudo apt-get install libglut-dev注意在这一步的时候,可能会出现以下情况,shell提示:
正在读取软件包列表... 完成正在分析软件包的依赖关系树
正在读取状态信息... 完成
E: 未发现软件包 libglut-dev如果出现上述情况,请输入将上述$sudo apt-get install libglut-dev命令改成$sudo apt-get install freeglut3-dev就行拉

最后用g++编译的时候
g++ example.cpp  -lGL -lGLU -lglut -lglew
总结原因应该是库没有正确的链接
然后我又在windows下试了加上链接库的参数,但是不行,不知道为什么
g++ example.cpp -lglut32 -lopengl32 -lGLU32 -lglew32 -lglew32
不过已经很不错了,反正是可以编译了,这就足够了
最后谢谢你的指点,让我少走了一点弯路
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-12 18:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表