Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 03, 2025 11:51

Foren-Übersicht » Programmierung » Allgemein
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: glew - undefined reference
BeitragVerfasst: So Nov 07, 2010 12:35 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 03, 2008 12:01
Beiträge: 167
Wohnort: /country/germany
Programmiersprache: C++ / FreeBASIC
Hi,
ich habe mal wieder ein Problem. Hab vor kurzem angefangen, C++ statt FreeBASIC zu verwenden, also hab ich mir MinGW und Code::Blocks installiert.
Da ich natürlich auch OpenGL-Extensions nutzen will, hab ich mir glew runtergeladen und folgendermaßen kompiliert:
Zitat:
gcc -c -O2 -Wall -W -DGLEW_STATIC -I../include -o libglew32.a glew.c


Die enstandene Datei hab ich dann in den entsprechenden Ordner von MinGW kopiert, ebenso die Header. Eingebunden wird das ganze in meinem code folgendermaßen:
Code:
#define GLEW_STATIC
#include <GL/glew.h>
#include <GL/gl.h>
#include <windows.h>


Wenn ich dann versuche, das ganze zu kompilieren, kommen folgende zwei Fehler sehr oft vor:
Zitat:
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a:glew.c|| undefined reference to `wglGetProcAddress@4'|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a:glew.c|| undefined reference to `glGetString@4'|


Ich linke folgende Libs dazu (in dieser Reihenfolge): opengl32, glu32, gdi32, glew32.

Ich hab schon die ganze Zeit mit google und der Forensuche gesucht, habe aber nichts hilfreiches gefunden.
Danke im Vorraus ;)

/edit:
Ich hab jetzt mal die glew32s.lib aus dem bin-Paket genommen, in libglew32.a umbenannt und eingefügt. Mein Code hat dann kompiliert, doch für OpenGL 3+ brauch ich ja eine wgl-Extension. Sobald ich aber wglew.h zusätzlich zu glew.h einbinde, bekomme ich folgendes:
Zitat:
||warning: auto-importing has been activated without --enable-auto-import specified on the command line.|
||Warning: .drectve `/DEFAULTLIB:"LIBCMT" /DEFAULTLIB:"OLDNAMES" ' unrecognized|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a(.\static\release\glew.obj):(.text[__glewInit_GL_VERSION_1_2]+0x4)||undefined reference to `_imp__wglGetProcAddress@4'|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a(.\static\release\glew.obj):(.text[__glewInit_GL_VERSION_1_3]+0x4)||undefined reference to `_imp__wglGetProcAddress@4'|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a(.\static\release\glew.obj):(.text[__glewInit_GL_VERSION_1_4]+0x4)||undefined reference to `_imp__wglGetProcAddress@4'|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a(.\static\release\glew.obj):(.text[__glewInit_GL_VERSION_1_5]+0x4)||undefined reference to `_imp__wglGetProcAddress@4'|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a(.\static\release\glew.obj):(.text[__glewInit_GL_VERSION_2_0]+0x4)||undefined reference to `_imp__wglGetProcAddress@4'|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a(.\static\release\glew.obj):(.text[_glewGetExtension]+0x14)||undefined reference to `_imp__glGetString@4'|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a(.\static\release\glew.obj):(.text[_glewContextInit]+0x8)||undefined reference to `_imp__glGetString@4'|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a(.\static\release\glew.obj):(.text[__glewInit_WGL_3DL_stereo_control]+0x7)||undefined reference to `_imp__wglGetProcAddress@4'|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a(.\static\release\glew.obj):(.text[__glewInit_WGL_AMD_gpu_association]+0x4)||undefined reference to `_imp__wglGetProcAddress@4'|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a(.\static\release\glew.obj):(.text[__glewInit_WGL_ARB_buffer_region]+0x4)||undefined reference to `_imp__wglGetProcAddress@4'|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a(.\static\release\glew.obj):(.text[__glewInit_WGL_ARB_create_context]+0x7)||undefined reference to `_imp__wglGetProcAddress@4'|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a(.\static\release\glew.obj):(.text[__glewInit_WGL_ARB_extensions_string]+0x7)||undefined reference to `_imp__wglGetProcAddress@4'|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a(.\static\release\glew.obj):(.text[_wglewGetExtension]+0x2a)||undefined reference to `_imp__wglGetCurrentDC@0'|
c:\programmieren\mingw\bin\..\lib\gcc\mingw32\4.5.0\..\..\..\libglew32.a(.\static\release\glew.obj):(.text[_wglewContextInit]+0x4)||undefined reference to `_imp__wglGetProcAddress@4'|
||=== Build finished: 14 errors, 2 warnings ===|


Wenn ich das mit der dynamischen lib mache (und auch "#define GLEW_STATIC" weglasse), bekomme ich nur noch einen Fehler:
Zitat:
obj\Release\aws\aws.o:aws.cpp|| undefined reference to `_imp____wglewCreateContextAttribsARB'|

aws.cpp ist der Code in dem ich wglCreateContextAttribsARB aufrufe.

Was mache ich denn falsch? Ich möchte einfach nur möglichst bequem OpenGL-Extensions nutzen, und das möglichst ohne extra DLL.

_________________
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glew - undefined reference
BeitragVerfasst: Sa Nov 20, 2010 18:54 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Sollte das problem immer noch bestehen, dann kannst du folgendes machen.
-füge glew.c und glewinfo.c,glew.h,glxew.h,wglew.h in dein codeblocks projekt
-setze GLEW_STATIC define unter project options
-linker braucht folgende libs auch in der richtigen reihenfolge
-lopengl32
-lglu32
-lgdi32
Nun sollte es sauber compilieren.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glew - undefined reference
BeitragVerfasst: Mi Nov 24, 2010 10:08 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Dez 03, 2008 12:01
Beiträge: 167
Wohnort: /country/germany
Programmiersprache: C++ / FreeBASIC
Danke für die Antwort, ich werde das mal probieren wenn ich heute nach Hause komme ;)
Momentan mache ich es so, dass ich die dll in den lib-Ordner lege und das GLEW_STATIC weglasse. Das funktioniert zwar (wobei ich mir nicht erklären kann warum), aber ich muss dann eben bei der exe die dll dabeihaben, was ich ja vermeiden möchte.
Momentan habe ich einige Probleme mit meiner Fenster-Klasse, ich hab die quasi 1:1 von FreeBASIC portiert, was irgendwie nicht hinhaut. Das Fenster taucht einfach nicht auf, ich schätze ich werde das ganze mal komplett neu schreiben.

_________________
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glew - undefined reference
BeitragVerfasst: So Jul 10, 2011 14:53 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Ich versuche auch gerade, GLEW mit Code::Blocks/MinGW zum laufen zu bringen. Nach vielen Versuchen klappt es immer noch nicht. Ich habe die Schritte von TAK2004 befolgt soweit ich konnte. Allerdings ist mir nicht klar, woher ich die Libraries lopengl32, lglu32 und lgdi32 nehmen soll. Außerdem meldet MinGW, dass es in glewinfo.c schon eine main()-Funktion gibt.

Bist du sicher, dass ich glewinfo.c brauche? Hier steht jedenfalls nichts davon.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glew - undefined reference
BeitragVerfasst: So Jul 10, 2011 15:51 
Offline
DGL Member
Benutzeravatar

Registriert: Di Mai 18, 2004 16:45
Beiträge: 2623
Wohnort: Berlin
Programmiersprache: Go, C/C++
Die libs liegen im system Ordner und sobald die in den Linker Optionen von deinem Projekt eingetragen hast, werden die auch dort automatisch gesucht und mit ins projekt gelinkt.
glewinfo.c ist nicht notwendig, solange dein compiler damit klar kommt, das es undefinierte Referenzen gibt.
Da aber im glew.h funktionen definiert sind, die in glewinfo.c implementiert werden, macht es Sinn diese mit zu kompilieren.
Wichtig ist das GLEW_STATIC define für alle build targets, da sonnst in den Headern die funktionen anders definiert sind und er die implementierung in einer externen dll erwartet.

_________________
"Wer die Freiheit aufgibt um Sicherheit zu gewinnen, der wird am Ende beides verlieren"
Benjamin Franklin

Projekte: https://github.com/tak2004


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glew - undefined reference
BeitragVerfasst: So Jul 10, 2011 16:38 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Danke erstmal für die Antwort.

TAK2004 hat geschrieben:
Die libs liegen im system Ordner
OK, und wo ist der system Ordner? Das komplette Verzeichnis, in dem CodeBlocks installiert ist, enthält weder einen Ordner namens "system" noch eine der Libraries. Oder meinst du "%windir%/system"? Da ist jedenfalls auch keine entsprechende Library.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glew - undefined reference
BeitragVerfasst: So Jul 10, 2011 18:28 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
1. Arbeitsplatz öffnen
2. Oben in der Zeile wo "Arbeitsplatz" oder "Computer" steht das hier reinkopieren
%SYSTEMROOT%\System32


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glew - undefined reference
BeitragVerfasst: So Jul 10, 2011 18:51 
Offline
DGL Member
Benutzeravatar

Registriert: So Sep 26, 2010 12:54
Beiträge: 238
Wohnort: wieder in Berlin
Programmiersprache: Englisch
SDH.Prod hat geschrieben:
1. Arbeitsplatz öffnen
2. Oben in der Zeile wo "Arbeitsplatz" oder "Computer" steht das hier reinkopieren
%SYSTEMROOT%\System32


bzw %systemroot%\SysWow64 wenn du ein 64bit OS hast aber für 32bit kompilieren willst :)
in dem fall \system32 = 64bit dlls&co, \syswow64 = 32bit dlls&co


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glew - undefined reference
BeitragVerfasst: So Jul 10, 2011 19:33 
Offline
DGL Member

Registriert: Sa Okt 18, 2008 11:59
Beiträge: 180
SysWOW64?

Wenn dort die 64Bit-dlls reinkommen wozu ist dann der (leere) System-Ordner da?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glew - undefined reference
BeitragVerfasst: So Jul 10, 2011 19:43 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Im system32 Ordner habe ich schon gesucht, aber dort ist nur eine opengl32.dll, keine lopengl32, lglu32 oder lgdi32.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glew - undefined reference
BeitragVerfasst: So Jul 10, 2011 20:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Das "l" gehört nicht zum Dateinamen, sondern sagt deinem Linker, dass nach "-l" eine Library folgt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glew - undefined reference
BeitragVerfasst: Mo Jul 11, 2011 15:43 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Ich habe jetzt die opengl32.dll, glu32.dll und gdi32.dll aus dem system32 kopiert und zur Linkerliste hinzugefügt. Trotzdem ändert sich nichts daran, dass MinGW immer noch nicht kompiliert (lauter "undefined reference to"-Fehlermeldungen). Wenn ich glewinfo.c ebenfalls kompiliere, bekomme ich die Fehlermeldung, es seien zwei main-Funktionen definiert (was ja auch stimmt). Eigentlich dachte ich auch immer, dass man DLLs nur in den selben Ordner der EXE-Datei tut und die Exe automatisch darauf zugreift, anstatt dass man sie in die Exe selbst linkt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glew - undefined reference
BeitragVerfasst: Mo Jul 11, 2011 16:16 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Zum Linken brauchst du nicht die DLL, sondern die zugehörige '.lib' (oder '.a' auf Linux). Wenn du statisch linkst, brauchst du zur Runtime keine DLL mehr. Genau das machst du mit GLEW_STATIC. Wenn du aber dynamisch linkst, brauchst du zur Compile-Time die '.lib' und zur Runtime die '.dll'.


Du brauchst also zum dynamischen Linken die opengl32.lib, gdi32.lib und die glu32.lib. (alle sollten beim Compiler/Windows SDK dabei sein).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glew - undefined reference
BeitragVerfasst: Mo Jul 11, 2011 16:49 
Offline
DGL Member

Registriert: Di Okt 13, 2009 17:25
Beiträge: 365
Programmiersprache: C++
Die Libraries sind nicht beim Compiler dabei gewesen. Ich habe jetzt die von einem anderen (Borland) Compiler genommen. Bei gdi32.lib beschwert sich GCC jetzt mit dieser Fehlermeldung:
Zitat:
file not recognized: File format not recognized


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags: Re: glew - undefined reference
BeitragVerfasst: Mo Jul 11, 2011 16:52 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mär 30, 2007 18:35
Beiträge: 331
Dann lad dir das Windows SDK. Ich weiß nicht, wo die unter Windows sonst noch dabei sind.


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 18 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Foren-Übersicht » Programmierung » Allgemein


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 14 Queries | GZIP : On ]