Sign in to follow this  
JoryRFerrell2013

Compile GLEW statically on win32 with MinGW?

Recommended Posts

I am having troubles running glew.

 

Using the following code:

#include <GL/glew.h>
#include <GL/freeglut.h>
#include <iostream>

int main(int argc, char **argv)
{
	glutInit(&argc, argv);
	glutInitContextVersion(3, 1);
	glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
	glutInitContextProfile(GLUT_CORE_PROFILE);

	glutInitDisplayMode(GLUT_DOUBLE|GLUT_RGBA);
	glutInitWindowSize(1024, 768);
	//glutInitWindowPosition(100, 100);
	glutCreateWindow("First run.");
	
	// init glew
	GLenum glewInitResult;
	
        glewExperimental = GL_TRUE;

        glewInit();
	/*
	if(GLEW_OK != glewInitResult)
	{
		std::cerr << "ERROR: " << glewGetErrorString(glewInitResult);
		return 1;
	 }
	*/
	
	std::cout << "hello";
	glClearColor(0,0,0,0);
	glutMainLoop();
	return 0;
}


I then compile/link with the following in MinGW:

    g++ -c -o glewTest.o glewTest.cpp -I"C:\MinGW\include\GL" -DGLEW_STATIC
    and...

    g++ -o glewTest.exe glewTest.o -L"C:\MinGW\lib" -lglew32 -lfreeglut -lopengl32 -lglu32 -Wl,--subsystem,windows

    or...

    g++ -o glewTest.exe glewTest.o -L"C:\MinGW\lib" -lglew32mx -lfreeglut -lopengl32 -lglu32 -Wl,--subsystem,windows

 

 

The "g++ -o glewTest.exe glewTest.o -L"C:\MinGW\lib" -lglew32 -lfreeglut -lopengl32 -lglu32 -Wl,--subsystem,windows"

does compile, but when I try to run I get the following error:

    "The procedure entry point glewInit@0 could not be located in the dynamic link library glew32.dll"

 

When I try to compile with "g++ -o glewTest.exe glewTest.o -L"C:\MinGW\lib" -lglew32mx -lfreeglut -lopengl32 -lglu32

-Wl,--subsystem,windows", I get the follow error:

    "glewTest.o:glewTest.cpp:(.text+0x15a): undefined reference to `glewInit@0' collect2.exe: error: ld returned 1 exit status"

 

I am at a loss...what do I do to either get the sys to find the dll, or get it to find the lib ref?

 

I am fine with either a static or dynamic lib build, but I have already tried the following with the dll version:

  1. Place the DLL in the same folder with the executable. No joy.

  2. Make sure I am using the same version and mem type (32/64bit) of the Lib with the DLL. Did so. Had no bearing.

  3. Make sure I am placing the lib/DLL/Headers in the correct paths. Did so. Also had no bearing.

  4. Make sure I am linking my necessary files correctly in the compile process. Obviously not working.

I have tried sifting through over 40-50 different webpages and they all pretty much say the same thing. Any new ideas?

Share this post


Link to post
Share on other sites

Never mind...just got help solving the problem.

 

Simply go download the glew src code (glew.c) and use #include "glew.c" in main project file.

Compile/Link with -DGLEW_STATIC IN compile options, and you should be up and running.

 

As others explained to me, the library relies on grabbing functions from a preset pool that has been

set-up by the project managers. This means that linking to the dll is pointless because the code can't

take advantage of any new functionality that doesn't exist in the DLL. So when new stuff becomes

available and your user base wants to take advantage of it, they must upgrade the dll also, or your code

will be useless. So you might as well save everyone the trouble and just use the static library version

from the get-go.

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