PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [Linker Problem]: OpenGL


pajofego
2006-08-19, 00:10:22
Hi,

ich habe da mal ein für mich schwer zu begreifendes Problem. Ich habe die ganzen Glut, Cg und Glew library files mittels reimp für Dev C++ vorbereitet.

Einfache OpenGL Progrämmchen lassen sich ohne weiteres compilieren, sobald ich aber folgende Codezeile habe:


// FBO identifier
GLuint fb;
glDeleteFramebuffersEXT(1,&fb);


erscheint folgende Fehlermeldung;

D:/Eigene Dateien/Dev-C++/OpenGL/TestHelloGPUmain_2.cpp:349: undefined reference to `__glewDeleteFramebuffersEXT'

Jedoch wenn ich oben genannte Zeile Code auskommentiere, lässt es sich compilieren auch wenn z.B.: auf Funktion die in glew.h definert sind zurückgegriffen wird:

z.B.:


GLenum err = glewInit();
if (GLEW_OK != err)
cout << ((char*)glewGetErrorString(err)) << endl;

// FBO identifier
// GLuint fb;
// glDeleteFramebuffersEXT(1,&fb);


Hat jemand von euch einen heißen Tipp für mich, warum mein Compiler die ganze Zeit bei folgenden Funktionsaufrufen meckert?

__glewDeleteFramebuffersEXT, __glewBindFramebufferEXT, __glewFramebufferTexture2DEXT, __glewCheckFramebufferStatusEXT

Schon mal Danke im voraus,

viele Grüße

pajofego

del_4901
2006-08-19, 05:02:15
glewinit() aufgerufen? ... in dieser scope?

zeckensack
2006-08-19, 08:57:47
Dev-C++ gibt dir im Log-Bereich die Kommandozeile für den Linker aus. Steht da hundertprozentig -lglew drin?
Weil momentan sieht's so aus als ob du die lib nicht dazulinkst, oder evtl eine veraltete (nicht zum Header passende) Version.

pajofego
2006-08-19, 09:15:43
Compiler: Default compiler
Building Makefile: "D:\Eigene Dateien\Dev-C++\OpenGL\Makefile.win"
Führt make clean aus
rm -f TestHelloGPUmain_2.o TestHelloGPU_2.exe

g++.exe -D__DEBUG__ -c TestHelloGPUmain_2.cpp -o TestHelloGPUmain_2.o -I"D:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"D:/Dev-Cpp/include/c++/3.4.2/backward" -I"D:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"D:/Dev-Cpp/include/c++/3.4.2" -I"D:/Dev-Cpp/include" -lopengl32 -lglut32 -lglu32 -lwsock32 -g3

g++.exe: -lopengl32: linker input file unused because linking not done
g++.exe: -lglut32: linker input file unused because linking not done
g++.exe: -lglu32: linker input file unused because linking not done
g++.exe: -lwsock32: linker input file unused because linking not done

g++.exe -D__DEBUG__ TestHelloGPUmain_2.o -o "TestHelloGPU_2.exe" -L"D:/Dev-Cpp/lib" -pg -g3 -O0 -lglut32 -lglu32 -lopengl32 -lwinmm -lgdi32 -lcg -lcggl -lglew32 -g3

TestHelloGPUmain_2.o(.text+0x443): In function `main':
D:/Eigene Dateien/Dev-C++/OpenGL/TestHelloGPUmain_2.cpp:349: undefined reference to `__glewDeleteFramebuffersEXT'
collect2: ld returned 1 exit status

make.exe: *** [TestHelloGPU_2.exe] Error 1

Ausführung beendet

// The main function
int main(int argc, char *argv[])
{
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowSize(512, 512);
glutCreateWindow("Hello...OpenGL!");

glutIdleFunc(idle);
glutDisplayFunc(display);
glutReshapeFunc(reshape);

initialize();
GLenum err = glewInit();
if (GLEW_OK != err)
cout << ((char*)glewGetErrorString(err)) << endl;

// FBO identifier
GLuint fb;
glDeleteFramebuffersEXT(1,&fb);

cout << err << endl;
glutMainLoop();
return EXIT_SUCCESS;
}


Lib und Header habe ich alle aktuell runtergeladen und in die entsprechende Verzeichnisse kopiert...:confused:

pajofego
2006-08-19, 20:21:18
Jetzt geht's nachdem ich per WebDownload OpenGlut und GLEW gewählt habe :biggrin:

Hier die Anmerkung vom Compiler:

Compiler: Default compiler
Building Makefile: "D:\Eigene Dateien\Dev-C++\OpenGL\Makefile.win"
Führt make clean aus
rm -f SimpleMathTutorialOnGPU.o SimpleMathTutorialOnGPU.exe

g++.exe -D__DEBUG__ -c SimpleMathTutorialOnGPU.cpp -o SimpleMathTutorialOnGPU.o -I"D:/Dev-Cpp/lib/gcc/mingw32/3.4.2/include" -I"D:/Dev-Cpp/include/c++/3.4.2/backward" -I"D:/Dev-Cpp/include/c++/3.4.2/mingw32" -I"D:/Dev-Cpp/include/c++/3.4.2" -I"D:/Dev-Cpp/include" -lopengl32 -lglut32 -lglu32 -lwsock32 -g3

g++.exe: -lopengl32: linker input file unused because linking not done
g++.exe: -lglut32: linker input file unused because linking not done
g++.exe: -lglu32: linker input file unused because linking not done
g++.exe: -lwsock32: linker input file unused because linking not done

g++.exe -D__DEBUG__ SimpleMathTutorialOnGPU.o -o "SimpleMathTutorialOnGPU.exe" -L"D:/Dev-Cpp/lib" -pg -g3 -O0 -lglut32 -lglu32 -lopengl32 -lwinmm -lgdi32 -lglew32 ../../../Dev-Cpp/lib/cg.lib ../../../Dev-Cpp/lib/cgGL.lib -g3

Info: resolving ___glewDeleteFramebuffersEXT by linking to __imp____glewDeleteFramebuffersEXT (auto-import)
Info: resolving ___glewGenFramebuffersEXT by linking to __imp____glewGenFramebuffersEXT (auto-import)

Info: resolving ___glewBindFramebufferEXT by linking to __imp____glewBindFramebufferEXT (auto-import)
Info: resolving ___glewFramebufferTexture2DEXT by linking to __imp____glewFramebufferTexture2DEXT (auto-import)
Info: resolving ___glewCheckFramebufferStatusEXT by linking to __imp____glewCheckFramebufferStatusEXT (auto-import)

Ausführung beendet
Kompilierung erfolgreich

Gruß

pajofego