Jump to content

  • Log In with Google      Sign In   
  • Create Account

Problem using GLEW 'undefined reference'

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1   Members   


Posted 31 July 2012 - 12:49 PM

I just started learning OpenGL and I'm using SDL with it. I'm having problems including glew. I've made sure it's included before SDL_opengl.h . I'm getting errors such as:

undefined referance to '_imp___GlewGenBuffers'

here is the code

[source lang="cpp"]#ifndef GRAPHICS_H#define GRAPHICS_H#define NO_SDL_GLEXT#include "GL/glew.h"#include "SDL/SDL.h"#include "SDL/SDL_opengl.h"#include "Texture.h"#include <iostream>namespace ColdFusion{ class Graphics { public: Graphics(); bool initScreen(int w, int h, int bpp, std::string caption); void drawSquare(int w, int h, int x, int y, GLuint tex); void clearBuffer(); void swapBuffer(); ~Graphics(); protected: private: bool initGL(int w, int h); };}#endif // GRAPHICS_H[/source]

Graphics.cpp(Line 60 is where I hit the first error.)

[source lang="cpp"]#include "Graphics.h"#include "SDL/SDL.h"#include "SDL/SDL_opengl.h"#include "Texture.h"namespace ColdFusion{ Graphics::Graphics() { } bool Graphics::initScreen(int w, int h, int bpp, std::string caption) { if(SDL_Init(SDL_INIT_EVERYTHING) < 0) { return false; } if(SDL_SetVideoMode(w,h,bpp,SDL_OPENGL) == NULL) { return false; } if(initGL(w,h) == NULL) { return false; } SDL_WM_SetCaption(caption.c_str(),NULL); return true; } bool Graphics::initGL(int w, int h) { glEnable(GL_TEXTURE_2D); glClearColor(0,0,0,0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(0,w,h,0,-1,1); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); if(glGetError() != GL_NO_ERROR) { return false; } return true; } void Graphics::drawSquare(int w, int h, int x, int y, GLuint tex) { static const GLfloat g_vertex_buffer_data[] = { 1.0f,-1.0f,0.0f, -1.0f,-1.0f,0.0f, -1.0f,1.0f,0.0f }; GLuint vertex_buffer; glGenBuffers(1, &vertex_buffer); glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data), g_vertex_buffer_data,GL_STATIC_DRAW); // 1rst attribute buffer : vertices glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); glVertexAttribPointer( 0, // attribute 0. No particular reason for 0, but must match the layout in the shader. 3, // size GL_FLOAT, // type GL_FALSE, // normalized? 0, // stride (void*)0 // array buffer offset ); // Draw the triangle ! glDrawArrays(GL_TRIANGLES, 0, 3); // Starting from vertex 0; 3 vertices total -> 1 triangle glDisableVertexAttribArray(0); } void Graphics::clearBuffer() { glClear(GL_COLOR_BUFFER_BIT); } void Graphics::swapBuffer() { SDL_GL_SwapBuffers(); } Graphics::~Graphics() { }}[/source]


D:\cold-fusion-engine\ColdFusion\src\Handler.cpp||In member function 'int ColdFusion::Handler::Execute()':|
D:\cold-fusion-engine\ColdFusion\src\Handler.cpp|29|warning: control reaches end of non-void function|
D:\cold-fusion-engine\ColdFusion\src\Graphics.cpp||In member function 'bool ColdFusion::Graphics::initScreen(int, int, int, std::string)':|
D:\cold-fusion-engine\ColdFusion\src\Graphics.cpp|25|warning: NULL used in arithmetic|
obj\Debug\src\Graphics.o:D:\cold-fusion-engine\ColdFusion\src\Graphics.cpp|60|undefined reference to `_imp____glewGenBuffers'|
obj\Debug\src\Graphics.o:D:\cold-fusion-engine\ColdFusion\src\Graphics.cpp|61|undefined reference to `_imp____glewBindBuffer'|
obj\Debug\src\Graphics.o:D:\cold-fusion-engine\ColdFusion\src\Graphics.cpp|63|undefined reference to `_imp____glewBufferData'|
obj\Debug\src\Graphics.o:D:\cold-fusion-engine\ColdFusion\src\Graphics.cpp|66|undefined reference to `_imp____glewEnableVertexAttribArray'|
obj\Debug\src\Graphics.o:D:\cold-fusion-engine\ColdFusion\src\Graphics.cpp|67|undefined reference to `_imp____glewBindBuffer'|
obj\Debug\src\Graphics.o:D:\cold-fusion-engine\ColdFusion\src\Graphics.cpp|75|undefined reference to `_imp____glewVertexAttribPointer'|
obj\Debug\src\Graphics.o:D:\cold-fusion-engine\ColdFusion\src\Graphics.cpp|80|undefined reference to `_imp____glewDisableVertexAttribArray'|
||=== Build finished: 7 errors, 2 warnings ===|

Any idea's to what I could be doing wrong? I realize others have asked questions very similar to this but their solution didn't help me.

Edited by Zexanima, 31 July 2012 - 12:50 PM.

#2   Members   


Posted 01 August 2012 - 12:49 AM

The solution should be the same as in this thread: http://www.gamedev.n...s-express-2010/

You need to tell the linker to link glew32.lib (or glew32s.lib if you want to link to the static version of GLEW). If you want to link to GLEW static, remember to define GLEW_STATIC before any place where you include glew.h.
On MSVC you can use
#pragma comment(lib, "glew32s.lib")
to link to the library or Project Properties->Configuration Properties->Linker->Input->Additional Dependencies. I don't have a MSVC 2010 to check right now but it should be similar there.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.