2012-12-15 8 views
7

Ich verwende this OpenGL-Tutorial. Ich habe SDL für die Erstellung meines Fensters verwendet und jetzt muss ich glew verwenden (siehe den Abschnitt Eine weitere Sache am Ende des Tutorials). Aber was auch immer ich verbinde, schließe ein, kopiere oder definiere alles, was ich bekomme, sind ungelöste externe Symbolfehler.ungelöst externes Symbol mit GLEW, SDL und OpenGL in VIsual Studio 2010 Express

ich habe:

  • verlinkte mein Projekt in dem GLEW Lib-Ordner
  • hinzugefügt Include-Ordner zu meinem Pfad enthält
  • die umfassen kopiert werden, ist und lib-Dateien in dem Verzeichnis C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ V7.0A \ in den sachgemäßen Karten
  • glew32.dll kopiert und glew32mx.dll meinen System32 Ordner
  • enthielten und verschiedene Dateien definiert (siehe Screenshots 2)

Ich lasse die Screenshots sprechen, was habe ich vergessen?

Screenshots:

sollten hier gehen, aber aufgrund der neuen Benutzerregel kann ich sie hier nicht enthalten. Here is a link

+0

Sie haben alle diese Screenshots gemacht, aber nicht daran gedacht, Linkfehler zu posten. –

+1

@BartekBanachewicz Die Linker-Fehler sind in den Screenshots. – Aaron

+1

Vielleicht verwenden Sie eine 32-Bit-Version einer Bibliothek und eine 64-Bit-Version einer anderen. Ich bin nicht sicher, ob dies einen Linker-Fehler verursachen würde, aber ich weiß, dass es die Ursache von Problemen sein kann, wenn Sie mehrere Bibliotheken verwenden. – Aaron

Antwort

0

Ich denke, dass Sie mit glew32sd.lib oder glew32s.lib verknüpfen müssen (abhängig von Debug- oder Release-Build-Konfiguration), da Sie GLEW_STATIC definiert haben.

Hier ist ein Ausschnitt aus einem vorkompilierten Header auf einer Win32 Glew-Anwendung, die wir vor kurzem abgeschlossen haben. Es zeigt die Bibliotheken wir verbunden:

#pragma comment(lib, "OpenGL32.lib") 
#pragma comment(lib, "GLu32.lib") 
#pragma comment(lib, "freeglut_static.lib") 

#define GLEW_STATIC 

#if defined _DEBUG 
    #pragma comment(lib, "glew32sd.lib") 
#else 
    #pragma comment(lib, "glew32s.lib") 
#endif 

#include <GL\glew.h> 
#include <gl\GL.h> 
#include <gl\GLU.h> 

Bitte beachte, dass wir glew32s.lib und glew32sd.lib (die Debug-Äquivalent) verwendet, die ich glaube, dass die statische Bibliothek für glew ist.

Wenn Sie die Bibliothek referenziert haben und Ordner korrekt einschließen, ist das einzige andere Problem, das ich Ihnen vorstellen kann müssen die DLL-Dateien in den Ausgabeordner für Ihr Projekt kopiert werden.

Wenn beispielsweise Ihr Projekt nach c: \ MyProject \ Debug \ MyProject.exe erstellt wird, kopieren Sie die DLLs in c: \ MyProject \ Debug.

Ich hoffe, das hilft.

+2

Verwenden von 'Pragma Kommentar (lib 'ist eine sehr schlechte Angewohnheit. Dieses Pragma ist nicht-Standard und nicht-portable plus es zwingt Sie zum falschen denken. Linking mit Bibliotheken ist Linker's Arbeit, so Jamming Bibliothek Referenzen in C++ Code ist auf lange Sicht eine schlechte Idee, tu dir selbst einen Gefallen und verlinke richtig, indem du Bibliotheken in Projekteinstellungen hinzufügst oder besser noch ein anständiges Build-System - cmake/qmake - lernst, das Projektdateien auf Anfrage generieren kann - weil das durchaus möglich ist dass Sie Visual Studio nicht für immer verwenden werden – SigTerm

+0

Nicht standardgemäß zu was? Und portabel zu wo? Gibt es eine Standardmethode, Befehle an zwei verschiedene Linker zu senden? Und hat diese Perspektive irgendetwas mit der OP-Frage zu tun? Sie haben sich die OP-Methode angesehen, den Linker anzuweisen, Sie würden bemerken, dass es nicht portierbar ist (und spezifisch für die Windows-Plattform). Also wirklich, danke für Ihre Meinung, aber ich benutze VS seit Jahren und Ich muss nicht wechseln. Go werben Sie Ihre Tool Affections irgendwo, dass es relevant ist. – fishfood

+0

"Nicht Standard was?" Nach C++. In C++ - Standard nicht vorhanden. "Und tragbar wohin?" Zu * ANY * Nicht-Microsoft Compiler, einschließlich Windows-Version von gcc. "Gibt es eine Standardmethode, Befehle an zwei verschiedene Linker zu senden?" Ja da ist. Verwenden Sie qmake, cmake oder scons als Build-System. Sie können Linker-Befehle für verschiedene Zielplattformen ausgeben. cmake/qmake kann gegen Projekte generieren. "und spezifisch für die Windows-Plattform" Kann keinen plattformspezifischen Code sehen. Sollte auf allen Plattformen mit SDL kompilierbar sein. – SigTerm

0

Dies kann nicht Ihr sofortiges Problem lösen, aber kann Ihnen helfen, andere eingehende später ausweichen. Ich weiß es nicht. Was ich anbiete, ist lediglich eine Empfehlung einer anderen Ressource, um zu lernen, wie man das macht, wonach Sie gefragt haben.

Jetzt denke ich, dass dein erster Link kaputt ist, weil er Links zu den Screenshots für mich enthält. Ich wollte gerade das Tutorial sehen, konnte es aber nicht.

Wie auch immer, ich habe ein Buch namens OpenGL SuperBible 5th ed; verwendet, das sehr leicht verdaulich ist.

Es setzt voraus, dass Sie nichts über 3D-Grafiken wissen, wie Sie die Bibliotheken einbinden, ein Fenster für Ihr System erstellen usw. Es geht jedoch sehr detailliert, ohne zu lange zu lesen. Ich beendete das Buch in zwei Wochen (naja, während eines Urlaubs, sonst nichts tun).

Ich bin in keiner Weise mit dem Buchbesitzer verbunden, ich mochte es einfach sehr und es scheint mir, dass was Sie kämpfen mit wurde gnädig von ihm behandelt.