Sign in to follow this  
Zexanima

OpenGL Problem using GLEW 'undefined reference'

Recommended Posts

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:
[quote]undefined referance to '_imp___GlewGenBuffers'[/quote]

here is the code

[b]Graphics.h[/b]
[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]

[b]Graphics.cpp[/b](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]

[b]Errors[/b]

[CODE]
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 ===|
[/CODE]

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

Share this post


Link to post
Share on other sites
The solution should be the same as in this thread: [url="http://www.gamedev.net/topic/627659-installing-glewh-libraries-for-vs-express-2010/"]http://www.gamedev.n...s-express-2010/[/url]
[quote]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.[/quote]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this