Undefinierte Referenzen zu _imp____glew* Funktionen mit minGW-gcc
Ich versuche zu kompilieren ein relativ einfaches OpenGL-Programm mit MinGW auf einem Win 7 x64 system, und ich halte immer Undefinierte Referenzen zu einigen der GLEW-Funktionen. Ich habe die Bibliotheken, die zur Verknüpfung der Programme, und suchen, um für jede Bibliothek, die ich möglicherweise fehlen aus meiner Liste, aber die Ausgabe vom linker immer noch wie folgt aussieht:
16:35:50 **** Incremental Build of configuration Debug for project test ****
Info: Internal Builder is used for build
gcc -LD:/DEV/openGL/lib/x86 -LD:/DEV/x86/lib -o test.exe test.o -lfreeglut -lglaux -lglew32s -lglu32 -lglfw3 -lopengl32 -lgdi32
test.o: In function `init':
E:\Development\C\test\Debug/../test.c:32: undefined reference to `_imp____glewGenVertexArrays'
E:\Development\C\test\Debug/../test.c:33: undefined reference to `_imp____glewBindVertexArray'
E:\Development\C\test\Debug/../test.c:35: undefined reference to `_imp____glewGenBuffers'
E:\Development\C\test\Debug/../test.c:36: undefined reference to `_imp____glewBindBuffer'
E:\Development\C\test\Debug/../test.c:37: undefined reference to `_imp____glewBufferData'
test.o: In function `display':
E:\Development\C\test\Debug/../test.c:45: undefined reference to `_imp____glewBindVertexArray'
test.o: In function `main':
E:\Development\C\test\Debug/../test.c:61: undefined reference to `_imp__glewInit@0'
collect2: ld returned 1 exit status
16:35:50 Build Finished (took 675ms)
Ich habe versucht, mit sowohl-als-auch lglew32 und -lglew32s in mehreren unterschiedlichen Konfigurationen, zu denken, dass vielleicht gab es Definitionen in glew32s, dass die waren nicht in glew32, und dies nicht hilft. Irgendwelche Hinweise, was ich möglicherweise fehlen, oder etwas, das ich übersehen habe?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie
#define GLEW_STATIC
vor#include "glew.h"
wenn Sie mit der statischen Verknüpfung Bibliothek. Ich würde voran gehen und eine Regel hinzufügen zu Ihrem Makefile definieren diese pre-Prozessor-token, anstatt tatsächlich setzen die#define ...
in Ihrem source-code.Dies ist bereits in der installation-Dokumentation für GLEW, durch die Art und Weise. Aber die Beurteilung durch, wie oft diese Frage gestellt wird, ist es möglicherweise nicht eindeutig genug.
UPDATE:
Der Grund für die Definition dieses token ist, dass Microsoft Windows verwendet eine spezielle
__declspec (...)
für die DLL-Importe und Exporte. Durch die DefinitionGLEW_STATIC
sagen Sie den linker an, verwenden Sie ein standard-Verhalten zu suchen, die Symbole in Ihrem.lib
.Wenn
GLEW_STATIC
ist nicht definiert, es informiert den linker, die library-Symbole werden aufgelöst, zur Laufzeit. Aber MSVC muss wissen, ob es Exporte oder Importe und damit gibt es ein weiteres tokenGLEW_BUILD
definiert dieses Verhalten. Da Sie eine Verknüpfung erstellen möchten (import), und nicht bauen (export) GLEW, stellen Sie sicher, dass Sie nicht definierenGLEW_BUILD
.Es ist auch erwähnenswert, dass Sie nicht die vorgefertigte dynamische Verknüpfung
.lib
- und DLL-Dateien, die geliefert werden, auf der offiziellen GLEW website. Sie sind kompiliert mit MSVC; die Verwendung einer DLL kompiliert mit MSVC in MinGW sehen dieser link. Die bessere Lösung ist, einfach zu vermeiden, mit der dynamic link-Bibliothek, und verwenden Sie die statische Bibliothek.GLEW_STATIC
token und zeigen Sie die Installationsanweisungen genug sein würde, um Sie zu erkennen, dieGLEW_BUILD
token in der Dokumentation.