Biblioteki glew, freeglut i gltools

0

Witam. Kupiłem książkę OpenGL. Księga eksperta wydanie 5. Niestety nie mogę skonfigurować code::blocks tak aby przykłady z książki działały. Na virtual studio wszystko działa. Co mogłem zrobić nie tak? Dotłaczam do linkera następujące biblioteki:
opengl32
glu32
winmm
gdi32
C:\Program Files\CodeBlocks\MinGW\lib\gltools.lib
C:\Program Files\CodeBlocks\MinGW\lib\libfreeglut_static.a
C:\Program Files\CodeBlocks\MinGW\lib\glew32s.lib
C:\Program Files\CodeBlocks\MinGW\lib\glut32.lib
C:\Program Files\CodeBlocks\MinGW\lib\libopengl32.a

Oraz inne opcje:
-lfreeglut_static
-lopengl32
-lwinmm
-lgdi32
-Wl,--subsystem,windows

Kompilator wywala mi taki log:

-------------- Clean: Release in KurwaRobieToLastTime (compiler: GNU GCC Compiler)---------------

Cleaned "KurwaRobieToLastTime - Release"

-------------- Build: Release in KurwaRobieToLastTime (compiler: GNU GCC Compiler)---------------

mingw32-g++.exe -Wall -O2 -I"C:\Program Files\CodeBlocks\MinGW\include" -c C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLBatch.cpp -o obj\Release\GLBatch.o
In file included from C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLBatch.cpp:4:0:
c:\program files\codeblocks\mingw\bin\../lib/gcc/mingw32/4.7.1/../../../../include/GLBatch.h: In constructor 'GLBatch::GLBatch()':
c:\program files\codeblocks\mingw\bin\../lib/gcc/mingw32/4.7.1/../../../../include/GLBatch.h:123:16: warning: 'GLBatch::nNumTextureUnits' will be initialized after [-Wreorder]
c:\program files\codeblocks\mingw\bin\../lib/gcc/mingw32/4.7.1/../../../../include/GLBatch.h:122:16: warning:   'GLuint GLBatch::nNumVerts' [-Wreorder]
C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLBatch.cpp:7:1: warning:   when initialized here [-Wreorder]
In file included from C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLBatch.cpp:4:0:
c:\program files\codeblocks\mingw\bin\../lib/gcc/mingw32/4.7.1/../../../../include/GLBatch.h:131:17: warning: 'GLBatch::pTexCoords' will be initialized after [-Wreorder]
c:\program files\codeblocks\mingw\bin\../lib/gcc/mingw32/4.7.1/../../../../include/GLBatch.h:115:11: warning:   'GLuint GLBatch::uiVertexArray' [-Wreorder]
C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLBatch.cpp:7:1: warning:   when initialized here [-Wreorder]
In file included from C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLBatch.cpp:4:0:
c:\program files\codeblocks\mingw\bin\../lib/gcc/mingw32/4.7.1/../../../../include/GLBatch.h:125:14: warning: 'GLBatch::bBatchDone' will be initialized after [-Wreorder]
c:\program files\codeblocks\mingw\bin\../lib/gcc/mingw32/4.7.1/../../../../include/GLBatch.h:121:16: warning:   'GLuint GLBatch::nVertsBuilding' [-Wreorder]
C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLBatch.cpp:7:1: warning:   when initialized here [-Wreorder]
In file included from C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLBatch.cpp:4:0:
c:\program files\codeblocks\mingw\bin\../lib/gcc/mingw32/4.7.1/../../../../include/GLBatch.h:121:16: warning: 'GLBatch::nVertsBuilding' will be initialized after [-Wreorder]
c:\program files\codeblocks\mingw\bin\../lib/gcc/mingw32/4.7.1/../../../../include/GLBatch.h:118:12: warning:   'GLuint* GLBatch::uiTextureCoordArray' [-Wreorder]
C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLBatch.cpp:7:1: warning:   when initialized here [-Wreorder]
mingw32-g++.exe -Wall -O2 -I"C:\Program Files\CodeBlocks\MinGW\include" -c C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLShaderManager.cpp -o obj\Release\GLShaderManager.o
mingw32-g++.exe -Wall -O2 -I"C:\Program Files\CodeBlocks\MinGW\include" -c C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLTools.cpp -o obj\Release\GLTools.o
C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLTools.cpp: In function 'GLbyte* gltReadBMPBits(const char*, int*, int*)':
C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLTools.cpp:1060:10: warning: converting 'false' to pointer type 'GLbyte* {aka signed char*}' [-Wconversion-null]
C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLTools.cpp:1072:10: warning: converting 'false' to pointer type 'GLbyte* {aka signed char*}' [-Wconversion-null]
mingw32-g++.exe -Wall -O2 -I"C:\Program Files\CodeBlocks\MinGW\include" -c C:\Users\Bartek\Desktop\KurwaRobieToLastTime\GLTriangleBatch.cpp -o obj\Release\GLTriangleBatch.o
mingw32-g++.exe -Wall -O2 -I"C:\Program Files\CodeBlocks\MinGW\include" -c C:\Users\Bartek\Desktop\KurwaRobieToLastTime\main.cpp -o obj\Release\main.o
mingw32-g++.exe -Wall -O2 -I"C:\Program Files\CodeBlocks\MinGW\include" -c C:\Users\Bartek\Desktop\KurwaRobieToLastTime\math3d.cpp -o obj\Release\math3d.o
mingw32-g++.exe -L"C:\Program Files\CodeBlocks\MinGW\lib" -o bin\Release\KurwaRobieToLastTime.exe obj\Release\GLBatch.o obj\Release\GLShaderManager.o obj\Release\GLTools.o obj\Release\GLTriangleBatch.o obj\Release\main.o obj\Release\math3d.o  -lfreeglut_static -lopengl32 -lwinmm -lgdi32 -Wl,--subsystem,windows -s  -lopengl32 -lglu32 -lwinmm -lgdi32 "C:\Program Files\CodeBlocks\MinGW\lib\gltools.lib" "C:\Program Files\CodeBlocks\MinGW\lib\libfreeglut_static.a" "C:\Program Files\CodeBlocks\MinGW\lib\glew32s.lib" "C:\Program Files\CodeBlocks\MinGW\lib\glut32.lib" "C:\Program Files\CodeBlocks\MinGW\lib\libopengl32.a" -mwindows
C:\Program Files\CodeBlocks\MinGW\lib\glew32s.lib(tmp/glew_static/Release/Win32/glew.obj):(.bss+0x0): multiple definition of `__glewCopyTexSubImage3D'
C:\Program Files\CodeBlocks\MinGW\lib\gltools.lib(./Release/glew.obj):(.bss+0x0): first defined here
C:\Program Files\CodeBlocks\MinGW\lib\glew32s.lib(tmp/glew_static/Release/Win32/glew.obj):(.bss+0x4): multiple definition of `__glewDrawRangeElements'

[...]

C:\Program Files\CodeBlocks\MinGW\lib\gltools.lib(./Release/glew.obj):(.bss+0x2157): first defined here
C:\Program Files\CodeBlocks\MinGW\lib\glew32s.lib(tmp/glew_static/Release/Win32/glew.obj):(.bss+0x25f3): multiple definition of `glewExperimental'
C:\Program Files\CodeBlocks\MinGW\lib\gltools.lib(./Release/glew.obj):(.bss+0x2160): first defined here
Warning: .drectve `/DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized
Warning: .drectve `/DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized
Warning: .drectve `/DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized
collect2.exe: error: ld returned 1 exit status
Process terminated with status 1 (0 minute(s), 28 second(s))
0 error(s), 17 warning(s) (0 minute(s), 28 second(s))

W czym jest problem? Z góry dziękuje za pomoc ;]

0

a kod?
\

0

Kod:


#include <GLTools.h>
#include <GLShaderManager.h> 
#define FREEGLUT_STATIC
#include <GL/glut.h>

GLBatch cosBatch;
GLShaderManager shaderManager;

void ChangeSize(int w, int h)
{
	glViewport(0, 0, w, h);
}

void SetupRC()

	glClearColor(0.5f, 0.2f, 0.3f, 1.0f);
	shaderManager.InitializeStockShaders();
	GLfloat trojkat[] = {-0.3, 0.0 , 0.0,
						0.5, 0.0, 0.0,
						0.0, 0.7, 0.0};
	cosBatch.Begin(GL_TRIANGLES, 3);
	cosBatch.CopyVertexData3f(trojkat);
	cosBatch.End();
}

void RenderScene()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

	GLfloat kolor[] = {0.2f, 0.4f, 0.5f, 1.0f};
	shaderManager.UseStockShader(GLT_SHADER_IDENTITY, kolor);
	cosBatch.Draw();
	glutSwapBuffers();
}


int main(int argc, char* argv[])
{
	gltSetWorkingDirectory(argv[0]);

	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA | GLUT_STENCIL );
	glutInitWindowSize(1024,768);
	glutCreateWindow("program...");
	glutReshapeFunc(ChangeSize);
	glutDisplayFunc(RenderScene);

	GLenum err = glewInit();
	if (GLEW_OK != err) {
		fprintf(stderr, "Błąd GLEW: %s\n", glewGetErrorString(err));
		return 1;
		}

	SetupRC();

	glutMainLoop();
	return 0;
}

Problem występuje od razu po dodaniu:

#include <GLTools.h>
#include <GLShaderManager.h> 
#define FREEGLUT_STATIC
#include <GL/glut.h>
1

Zamiast rozkładać ręce, przeczytaj komunikaty.

C:\Program Files\CodeBlocks\MinGW\lib\glew32s.lib(tmp/glew_static/Release/Win32/glew.obj):(.bss+0x0): multiple definition of `__glewCopyTexSubImage3D'
C:\Program Files\CodeBlocks\MinGW\lib\gltools.lib(./Release/glew.obj):(.bss+0x0): first defined here

Widzimy, że funkcja (np. __glewCopyTexSubImage3D) jest wielokrotnie zdefiniowana: w bibliotece glew32s.lib oraz gltools.lib.
To znaczy że nie można linkować tych dwóch libek jednocześnie.

Jak się przyjrzeć jeszcze dokładniej, widzimy że przy obu libkach podano nazwę tego samego pliku obj (glew.obj).
(biblioteka .lib to zbiór wielu .obj)
To sugeruje, że biblioteka glew jest zawarta w gltools, więc wystarczy linkować tę drugą.

0

O cholerka działa! :D Dziękuje bardzo za pomoc męczyłem się z tym trochę :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1