Problem using GLEW 'undefined reference'

Started by
0 comments, last by BitMaster 11 years, 9 months ago
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'[/quote]

here is the code

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

Errors


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.
Advertisement
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.[/quote]

This topic is closed to new replies.

Advertisement