openGL新手问题(可能是环境)

MaXimofss 发布于 2014/05/02 12:56
阅读 2K+
收藏 0

运行环境:
win8.1 vs2012 freeglut2.8.1 glew1.10
运行代码:
OpenGLSuperBible v5: Triangle.cpp
报错如下:
1>------ 已启动生成: 项目: Triangle, 配置: Debug Win32 ------
1>Build started 2014/5/2 11:22:28.
1>InitializeBuildStatus:
1> Touching "Debug\Triangle.unsuccessfulbuild".
1>ClCompile:
1> Triangle.cpp
1>LINK : warning LNK4098: 默认库“LIBCMT”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>Triangle.obj : error LNK2019: 无法解析的外部符号 _glewInit@0 ,该符号在函数 _main 中被引用
1>Triangle.obj : error LNK2019: 无法解析的外部符号 _glewGetErrorString@4,该符号在函数 _main 中被引用
1>Triangle.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall GLBatch::GLBatch(void)" (??0GLBatch@@QAE@XZ),该符号在函数 "void __cdecl `dynamic initializer for 'triangleBatch''(void)" (??__EtriangleBatch@@YAXXZ) 中被引用
1>Triangle.obj : error LNK2019: 无法解析的外部符号 "public: virtual __thiscall GLBatch::~GLBatch(void)" (??1GLBatch@@UAE@XZ),该符号在函数 "void __cdecl `dynamic atexit destructor for 'triangleBatch''(void)" (??__FtriangleBatch@@YAXXZ) 中被引用
1>Triangle.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall GLBatch::Begin(unsigned int,unsigned int,unsigned int)" (?Begin@GLBatch@@QAEXIII@Z),该符号在函数 "void __cdecl SetupRC(void)" (?SetupRC@@YAXXZ) 中被引用
1>Triangle.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall GLBatch::End(void)" (?End@GLBatch@@QAEXXZ),该符号在函数 "void __cdecl SetupRC(void)" (?SetupRC@@YAXXZ) 中被引用
1>Triangle.obj : error LNK2019: 无法解析的外部符号 "public: void __thiscall GLBatch::CopyVertexData3f(float (*)[3])" (?CopyVertexData3f@GLBatch@@QAEXPAY02M@Z),该符号在函数 "public: void __thiscall GLBatch::CopyVertexData3f(float *)" (?CopyVertexData3f@GLBatch@@QAEXPAM@Z) 中被引用
1>Triangle.obj : error LNK2019: 无法解析的外部符号 "public: virtual void __thiscall GLBatch::Draw(void)" (?Draw@GLBatch@@UAEXXZ),该符号在函数 "void __cdecl RenderScene(void)" (?RenderScene@@YAXXZ) 中被引用
1>Triangle.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall GLShaderManager::GLShaderManager(void)" (??0GLShaderManager@@QAE@XZ),该符号在函数 "void __cdecl `dynamic initializer for 'shaderManager''(void)" (??__EshaderManager@@YAXXZ) 中被引用
1>Triangle.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall GLShaderManager::~GLShaderManager(void)" (??1GLShaderManager@@QAE@XZ),该符号在函数 "void __cdecl `dynamic atexit destructor for 'shaderManager''(void)" (??__FshaderManager@@YAXXZ) 中被引用
1>Triangle.obj : error LNK2019: 无法解析的外部符号 "public: bool __thiscall GLShaderManager::InitializeStockShaders(void)" (?InitializeStockShaders@GLShaderManager@@QAE_NXZ),该符号在函数 "void __cdecl SetupRC(void)" (?SetupRC@@YAXXZ) 中被引用
1>Triangle.obj : error LNK2019: 无法解析的外部符号 "public: int __cdecl GLShaderManager::UseStockShader(enum GLT_STOCK_SHADER,...)" (?UseStockShader@GLShaderManager@@QAAHW4GLT_STOCK_SHADER@@ZZ),该符号在函数 "void __cdecl RenderScene(void)" (?RenderScene@@YAXXZ) 中被引用
1>Triangle.obj : error LNK2019: 无法解析的外部符号 "void __cdecl gltSetWorkingDirectory(char const *)" (?gltSetWorkingDirectory@@YAXPBD@Z),该符号在函数 _main 中被引用
1>F:\开发工具\test\Triangle\Debug\Triangle.exe : fatal error LNK1120: 13 个无法解析的外部命令
1>
1>Build FAILED.
1>
1>Time Elapsed 00:00:00.94
========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========


我是按照网上方法配置的
http://www.tuicool.com/articles/rY3iUr
自己研究一段了,实在不知道什么原因了,特来求助,望指点

代码如下:另外代码如下,比较简单的东西,就是环境搞不定(原书是用的2008的环境):
// Triangle.cpp
// Our first OpenGL program that will just draw a triangle on the screen.
#include <GLTools.h> // OpenGL toolkit
#include <GLShaderManager.h> // Shader Manager Class
#ifdef __APPLE__
#include <glut/glut.h> // OS X version of GLUT
#else
#define FREEGLUT_STATIC
#include <GL/glut.h> // Windows FreeGlut equivalent
#endif
GLBatch triangleBatch;
GLShaderManager shaderManager;
///////////////////////////////////////////////////////////////////////////////
// Window has changed size, or has just been created. In either case, we need
// to use the window dimensions to set the viewport and the projection matrix.
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
}

///////////////////////////////////////////////////////////////////////////////
// This function does any needed initialization on the rendering context.
// This is the first opportunity to do any OpenGL related tasks.
void SetupRC()
{
// Blue background
glClearColor(0.0f, 0.0f, 1.0f, 1.0f );

shaderManager.InitializeStockShaders();
// Load up a triangle
GLfloat vVerts[] = { -0.5f, 0.0f, 0.0f,
0.5f, 0.0f, 0.0f,
0.0f, 0.5f, 0.0f };
triangleBatch.Begin(GL_TRIANGLES, 3);
triangleBatch.CopyVertexData3f(vVerts);
triangleBatch.End();
}

///////////////////////////////////////////////////////////////////////////////
// Called to draw scene
void RenderScene(void)
{
// Clear the window with current clearing color
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
GLfloat vRed[] = { 1.0f, 0.0f, 0.0f, 1.0f };
shaderManager.UseStockShader(GLT_SHADER_IDENTITY, vRed);
triangleBatch.Draw();
// Perform the buffer swap to display back buffer
glutSwapBuffers();
}

///////////////////////////////////////////////////////////////////////////////
// Main entry point for GLUT based programs
int main(int argc, char* argv[])
{
gltSetWorkingDirectory(argv[0]);

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
glutInitWindowSize(800, 600);
glutCreateWindow("Triangle");
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
GLenum err = glewInit();
if (GLEW_OK != err) {
fprintf(stderr, "GLEW Error: %s\n", glewGetErrorString(err));
return 1;
}

SetupRC();
glutMainLoop();
return 0;
}

以下是问题补充:

@MaXimofss:首先感谢回复,但是加上也不行啊…… 另外有个小问题,在编译freeglut的时候有说freeglut.lib无法启动,是否有影响? (2014/05/02 13:35)
加载中
0
小熊猫大暴走
小熊猫大暴走

glew 你没有引用啊

MaXimofss
MaXimofss
感谢,但是加上也不行……我看看把图片贴上
0
小熊猫大暴走
小熊猫大暴走

我认为啊 opengl开发宝典提供的代码是有项目文件的,你不用动任何文件,编译就可以运行了。我记得v4有,v5就不知道了

MaXimofss
MaXimofss
这个我知道,在vs2008下确实按照说明一步一步来就好,但是我现在在vs2012下就各种出问题,这也是我想解决的问题
0
MaXimofss
MaXimofss

参考http://blog.csdn.net/augusdi/article/details/20469561

运行成功,但是依赖库根据实际情况略有改动

返回顶部
顶部