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);
    
    #endif
    

    tloader.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"
    
    #endif
    

    EDIT:
    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!"


Anmelden zum Antworten