error: `GL_TEXTURE0_ARB' was not declared in this scope
-
Ich will mein OpenGL Programm mit dem MinGW kompilieren aber ich bekomme folgende Fehler:
make: Entering directory `/d/Eigene Dateien/cpp/gl/tloader' ----------------------------------------------------------------------- compiling main.cpp ... In file included from tloader.h:16, from main.cpp:1: vector.h: In member function `void CVector::TexcoordToGL() const': vector.h:24: error: `GL_TEXTURE0_ARB' was not declared in this scope vector.h:24: error: `glMultiTexCoord3fvARB' was not declared in this scope vector.h:24: warning: unused variable 'GL_TEXTURE0_ARB' vector.h:24: warning: unused variable 'glMultiTexCoord3fvARB' vector.h: In member function `void CVector::TangXToGL() const': vector.h:25: error: `GL_TEXTURE1_ARB' was not declared in this scope vector.h:25: error: `glMultiTexCoord3fvARB' was not declared in this scope vector.h:25: warning: unused variable 'GL_TEXTURE1_ARB' vector.h:25: warning: unused variable 'glMultiTexCoord3fvARB' vector.h: In member function `void CVector::TangYToGL() const': vector.h:26: error: `GL_TEXTURE2_ARB' was not declared in this scope vector.h:26: error: `glMultiTexCoord3fvARB' was not declared in this scope vector.h:26: warning: unused variable 'GL_TEXTURE2_ARB' vector.h:26: warning: unused variable 'glMultiTexCoord3fvARB' make: *** [main.o] Error 1 make: Leaving directory `/d/Eigene Dateien/cpp/gl/tloader'So sieht die Makefile aus:
OBJ := main.o mesh.o shader.o texture.o vector.o vector2.o MINGW_BIN := "D:\lib\MinGW\bin\g++.exe" OUTPUT_BIN := "tloader.exe" MAKEFLAGS += -swr all: start start: $(OBJ) @echo "......................................................................" @echo "linking ..." $(MINGW_BIN) -ID:\lib\MinGW\include -LD:\lib\MinGW\lib -lSDL -lSDL_image -lgl32 -lglu32 -Wall -o $(OUTPUT_BIN) $(OBJ) %.o: %.cpp *.h @echo "-----------------------------------------------------------------------" @echo "compiling $< ..." $(MINGW_BIN) -ID:\lib\MinGW\include -LD:\lib\MinGW\lib -lSDL -lSDL_image -lgl32 -lglu32 -Wall -c -o $@ $< clean: @rm -fv *.o distclean: clean @rm -fv $(OUTPUT_BIN)und so die beiden Dateien, die der Fehler betrifft:
vector.h:
#ifndef _VECTOR_H #define _VECTOR_H struct CVector { union { float v[3]; struct { float x; float y; float z; }; CVector2 xy; }; void Set(float _x, float _y, float _z) { x = _x; y = _y; z = _z; }; float Len(void) const { return sqrt(x * x + y * y + z * z); }; float SquaredLen(void) const { return x * x + y * y + z * z; }; void Normalize(void) { float l; l = 1.0 / Len(); x *= l; y *= l; z *= l; }; void PutToGL(void) const { glVertex3fv(v); }; void NormalToGL(void) const { glNormal3fv(v); }; void TexcoordToGL(void) const { glMultiTexCoord3fvARB(GL_TEXTURE0_ARB, v); }; void TangXToGL(void) const { glMultiTexCoord3fvARB(GL_TEXTURE1_ARB, v); }; void TangYToGL(void) const { glMultiTexCoord3fvARB(GL_TEXTURE2_ARB, v); }; void SetFromPlane(const CVector2 &p, const CVector &n, float d); CVector operator -(void) const {CVector r; r.x = -x, r.y = -y, r.z = -z; return r; }; operator CVector2() const {CVector2 r; r.x = x; r.y = -z; return r; }; CVector &operator+=(const CVector o) {x += o.x; y += o.y; z += o.z; return *this;}; CVector &operator-=(const CVector o) {x -= o.x; y -= o.y; z -= o.z; return *this;}; CVector &operator*=(const CVector o) {x *= o.x; y *= o.y; z *= o.z; return *this;}; CVector &operator*=(float f) {x *= f; y *= f; z *= f; return *this;}; CVector &operator/=(float f) {x /= f; y /= f; z /= f; return *this;}; }; CVector Vec(float x, float y, float z); CVector operator+(const CVector &a, const CVector &b); CVector operator-(const CVector &a, const CVector &b); CVector operator*(const CVector &a, float scalar); CVector operator*(float scalar, const CVector &a); double Dot(const CVector &a, const CVector &b); CVector Cross(const CVector &a, const CVector &b); CVector Vec(const CVector2 &v, float y); CVector Rotate(const CVector &vec, const CVector &axis, float angle); double Det(const CVector &v1, const CVector &v2, const CVector &v3); #endiftloader.h:
#ifndef TLOADER_H #define TLOADER_H #define GL_GLEXT_PROTOTYPES #define MAX_LINE_LEN 300 #include <math.h> #include <fstream> #include <iostream> #include <stdio.h> #include <stdlib.h> #include <GL/gl.h> #include <GL/glu.h> #include "vector2.h" #include "vector.h" #include "shader.h" #include "texture.h" #include "mesh.h" #endifEDIT:
Auf Ubuntu läuft der Code einwandfrei! Muss also am MinGW liegen!
-
du hast im vector.h vergessen die nötigen Dateien zu #includen, in denen GL_TEXTURE0_ARB usw. definiert werden.
-
Die <GL/GL.h> die mit Windows kommt bzw der SDK enthält leider nur die Defintionen bis OpenGL1.4 und kaum Extensions. Verwende daher am besten glew um die alle Extensions zur Verfügung zu haben. Erspart Dir auch das umständliche laden der Funktionen aus der Treiber-DLL.
http://glew.sf.net
rya.
-
Scorcher24 schrieb:
Die <GL/GL.h> die mit Windows kommt bzw der SDK enthält leider nur die Defintionen bis OpenGL1.4 und kaum Extensions. Verwende daher am besten glew um die alle Extensions zur Verfügung zu haben. Erspart Dir auch das umständliche laden der Funktionen aus der Treiber-DLL.
http://glew.sf.net
rya.Danke! Werd ich gleich mal testen.
-
ok. Die Fehler sind weg. aber dafür kommen gleich die nächsten:
make: Entering directory `/d/Eigene Dateien/cpp/gl/tloader' ...................................................................... linking ... main.o:main.cpp:(.text+0x13b): undefined reference to `glShadeModel@4' main.o:main.cpp:(.text+0x14a): undefined reference to `glCullFace@4' main.o:main.cpp:(.text+0x159): undefined reference to `glFrontFace@4' main.o:main.cpp:(.text+0x168): undefined reference to `glEnable@4' main.o:main.cpp:(.text+0x193): undefined reference to `glClearColor@16' main.o:main.cpp:(.text+0x1bc): undefined reference to `glViewport@16' main.o:main.cpp:(.text+0x1cb): undefined reference to `glMatrixMode@4' main.o:main.cpp:(.text+0x1d3): undefined reference to `glLoadIdentity@0' main.o:main.cpp:(.text+0x1f8): undefined reference to `gluPerspective@32' main.o:main.cpp:(.text+0x209): undefined reference to `SDL_PumpEvents' main.o:main.cpp:(.text+0x215): undefined reference to `SDL_GetKeyState' main.o:main.cpp:(.text+0x26b): undefined reference to `glColor3f@12' main.o:main.cpp:(.text+0x288): undefined reference to `glMaterialfv@12' main.o:main.cpp:(.text+0x45a): undefined reference to `glGenTextures@8' main.o:main.cpp:(.text+0x473): undefined reference to `glBindTexture@8' main.o:main.cpp:(.text+0x4c4): undefined reference to `glTexImage2D@36' main.o:main.cpp:(.text+0x505): undefined reference to `gluBuild2DMipmaps@28' main.o:main.cpp:(.text+0x524): undefined reference to `glTexParameteri@12' main.o:main.cpp:(.text+0x543): undefined reference to `glTexParameteri@12' main.o:main.cpp:(.text+0x562): undefined reference to `glTexParameteri@12' main.o:main.cpp:(.text+0x581): undefined reference to `glTexParameteri@12' main.o:main.cpp:(.text+0x598): undefined reference to `glBindTexture@8' main.o:main.cpp:(.text+0x5b6): undefined reference to `glClear@4' main.o:main.cpp:(.text+0x5c5): undefined reference to `glEnable@4' main.o:main.cpp:(.text+0x5d4): undefined reference to `glEnable@4' main.o:main.cpp:(.text+0x5eb): undefined reference to `glLightModeli@8' main.o:main.cpp:(.text+0x5fa): undefined reference to `glMatrixMode@4' main.o:main.cpp:(.text+0x602): undefined reference to `glLoadIdentity@0' main.o:main.cpp:(.text+0x636): undefined reference to `gluPerspective@32' main.o:main.cpp:(.text+0x645): undefined reference to `glMatrixMode@4' main.o:main.cpp:(.text+0x64d): undefined reference to `glLoadIdentity@0' main.o:main.cpp:(.text+0x68f): undefined reference to `gluLookAt@72' main.o:main.cpp:(.text+0x69e): undefined reference to `glEnable@4' main.o:main.cpp:(.text+0x6d5): undefined reference to `glPointSize@4' main.o:main.cpp:(.text+0x6e4): undefined reference to `glBegin@4' main.o:main.cpp:(.text+0x706): undefined reference to `glVertex3f@12' main.o:main.cpp:(.text+0x70e): undefined reference to `glEnd@0' main.o:main.cpp:(.text+0x713): undefined reference to `SDL_GL_SwapBuffers' main.o:main.cpp:(.text+0x728): undefined reference to `SDL_Init' main.o:main.cpp:(.text+0x73d): undefined reference to `SDL_GetVideoInfo' main.o:main.cpp:(.text+0x787): undefined reference to `SDL_GL_SetAttribute' main.o:main.cpp:(.text+0x79b): undefined reference to `SDL_GL_SetAttribute' main.o:main.cpp:(.text+0x7af): undefined reference to `SDL_GL_SetAttribute' main.o:main.cpp:(.text+0x7c3): undefined reference to `SDL_GL_SetAttribute' main.o:main.cpp:(.text+0x7d7): undefined reference to `SDL_GL_SetAttribute' main.o:main.cpp:(.text+0x802): undefined reference to `SDL_SetVideoMode' shader.o:shader.cpp:(.text+0x15d): undefined reference to `_imp____glewGetObjectParameterivARB' shader.o:shader.cpp:(.text+0x193): undefined reference to `_imp____glewGetInfoLogARB' shader.o:shader.cpp:(.text+0x206): undefined reference to `_imp____glewCreateShaderObjectARB' shader.o:shader.cpp:(.text+0x239): undefined reference to `_imp____glewCreateProgramObjectARB' shader.o:shader.cpp:(.text+0x276): undefined reference to `_imp____glewCompileShaderARB' shader.o:shader.cpp:(.text+0x2a3): undefined reference to `_imp____glewGetObjectParameterivARB' shader.o:shader.cpp:(.text+0x2d6): undefined reference to `_imp____glewDeleteObjectARB' shader.o:shader.cpp:(.text+0x316): undefined reference to `_imp____glewLinkProgramARB' shader.o:shader.cpp:(.text+0x343): undefined reference to `_imp____glewGetObjectParameterivARB' shader.o:shader.cpp:(.text+0x376): undefined reference to `_imp____glewDeleteObjectARB' shader.o:shader.cpp:(.text+0x3c0): undefined reference to `_imp____glewShaderSourceARB' shader.o:shader.cpp:(.text+0x3fe): undefined reference to `_imp____glewAttachObjectARB' shader.o:shader.cpp:(.text+0x4a0): undefined reference to `_imp____glewGetUniformLocationARB' shader.o:shader.cpp:(.text+0x5f1): undefined reference to `_imp____glewUseProgramObjectARB' shader.o:shader.cpp:(.text+0x606): undefined reference to `_imp____glewUniform1iARB' shader.o:shader.cpp:(.text+0x623): undefined reference to `_imp____glewUniform1iARB' shader.o:shader.cpp:(.text+0x640): undefined reference to `_imp____glewUniform1iARB' shader.o:shader.cpp:(.text+0x65c): undefined reference to `_imp____glewUseProgramObjectARB' shader.o:shader.cpp:(.text+0x6c6): undefined reference to `glLightfv@12' shader.o:shader.cpp:(.text+0x6ff): undefined reference to `glLightModelfv@8' shader.o:shader.cpp:(.text+0x710): undefined reference to `_imp____glewUseProgramObjectARB' shader.o:shader.cpp:(.text+0x725): undefined reference to `_imp____glewUniform3f' shader.o:shader.cpp:(.text+0x757): undefined reference to `_imp____glewUniform3f' shader.o:shader.cpp:(.text+0x789): undefined reference to `_imp____glewUniform1f' shader.o:shader.cpp:(.text+0x7a4): undefined reference to `_imp____glewActiveTextureARB' shader.o:shader.cpp:(.text+0x7c5): undefined reference to `glBindTexture@8' shader.o:shader.cpp:(.text+0x7cd): undefined reference to `_imp____glewActiveTextureARB' shader.o:shader.cpp:(.text+0x7ee): undefined reference to `glBindTexture@8' shader.o:shader.cpp:(.text+0x7f6): undefined reference to `_imp____glewActiveTextureARB' shader.o:shader.cpp:(.text+0x817): undefined reference to `glBindTexture@8' shader.o:shader.cpp:(.text+0x827): undefined reference to `_imp____glewUseProgramObjectARB' shader.o:shader.cpp:(.text+0xb3c): undefined reference to `glGetFloatv@8' shader.o:shader.cpp:(.text+0xb55): undefined reference to `glGenTextures@8' shader.o:shader.cpp:(.text+0xb6e): undefined reference to `glBindTexture@8' shader.o:shader.cpp:(.text+0xbce): undefined reference to `glTexImage2D@36' shader.o:shader.cpp:(.text+0xc1e): undefined reference to `gluBuild2DMipmaps@28' shader.o:shader.cpp:(.text+0xc3d): undefined reference to `glTexParameteri@12' shader.o:shader.cpp:(.text+0xc5c): undefined reference to `glTexParameteri@12' shader.o:shader.cpp:(.text+0xc7b): undefined reference to `glTexParameteri@12' shader.o:shader.cpp:(.text+0xc9a): undefined reference to `glTexParameteri@12' shader.o:shader.cpp:(.text+0xcbb): undefined reference to `glTexParameterf@12' shader.o:shader.cpp:(.text+0xcd2): undefined reference to `glBindTexture@8' shader.o:shader.cpp:(.text+0xf42): undefined reference to `glGenTextures@8' shader.o:shader.cpp:(.text+0xf5b): undefined reference to `glBindTexture@8' shader.o:shader.cpp:(.text+0xfac): undefined reference to `glTexImage2D@36' shader.o:shader.cpp:(.text+0xfcb): undefined reference to `glTexParameteri@12' shader.o:shader.cpp:(.text+0xfea): undefined reference to `glTexParameteri@12' shader.o:shader.cpp:(.text+0x1009): undefined reference to `glTexParameteri@12' shader.o:shader.cpp:(.text+0x1028): undefined reference to `glTexParameteri@12' shader.o:shader.cpp:(.text+0x103f): undefined reference to `glBindTexture@8' texture.o:texture.cpp:(.text+0x2ff): undefined reference to `glDeleteTextures@8' texture.o:texture.cpp:(.text+0x321): undefined reference to `glDeleteTextures@8' texture.o:texture.cpp:(.text+0x343): undefined reference to `glDeleteTextures@8' texture.o:texture.cpp:(.text+0x369): undefined reference to `glDeleteTextures@8' texture.o:texture.cpp:(.text+0x38b): undefined reference to `glDeleteTextures@8' texture.o:texture.cpp:(.text+0x3ad): more undefined references to `glDeleteTextures@8' follow d:/lib/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../libmingw32.a(main.o):main.c:(.text+0x104): undefined reference to `WinMain@16' collect2: ld returned 1 exit status make: *** [start] Error 1 make: Leaving directory `/d/Eigene Dateien/cpp/gl/tloader'Hier die neue Makefile:
OBJ := main.o mesh.o shader.o texture.o vector.o vector2.o MINGW_BIN := "D:\lib\MinGW\bin\g++.exe" OUTPUT_BIN := "tloader.exe" MAKEFLAGS += -swr all: start start: $(OBJ) @echo "......................................................................" @echo "linking ..." $(MINGW_BIN) -ID:\lib\MinGW\include -LD:\lib\MinGW\lib -lopengl32 -lglu32 -lglew32 -lSDL -mwindows -Wall -o $(OUTPUT_BIN) $(OBJ) %.o: %.cpp *.h @echo "-----------------------------------------------------------------------" @echo "compiling $< ..." $(MINGW_BIN) -ID:\lib\MinGW\include -LD:\lib\MinGW\lib -mwindows -Wall -c -o $@ $< clean: @rm -fv *.o distclean: clean @rm -fv $(OUTPUT_BIN)
-
bump
-
Wie der Physiklehrer eines Freundes gepflegt zu sagen:
"Einmal reicht!"