Jump to content
  • Advertisement
Sign in to follow this  
Zexanima

OpenGL Problem using GLEW 'undefined reference'

This topic is 2181 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

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:
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. Edited by Zexanima

Share this post


Link to post
Share on other sites
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]

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!