Frage Warum versucht Visual Studio, freeglutd.lib zu verlinken?


Ich versuche, ein OpenGL-Programm mit Visual Studio 2013 zu kompilieren, aber ich bekomme den folgenden Fehler:

Fehler 1 Fehler LNK1104: Datei kann nicht geöffnet werden   "freeglutd.lib" ...

Als Referenz habe ich FreeGLUT installiert und VS konfiguriert, um die richtigen Verzeichnisse für die Include-Dateien und Bibliotheksdateien zu suchen. In der Tat erkennt VS die GLUT Include-Dateien ganz gut. Ich habe auch hinzugefügt opengl32.lib und freeglut.lib zum Zusätzliche Abhängigkeiten.

Warum sucht VS nach "freeglutd.lib"? Es ist definitiv nicht in den zusätzlichen Abhängigkeiten aufgeführt. Ich kann den Kompilierungsfehler lösen, indem ich 'libglut.lib' in 'libglutd.lib' umbenenne und den ersten von den Abhängigkeiten entferne, aber ich bin nur neugierig, warum es sich so verhält.

Apropos zusätzliche Abhängigkeiten, ist das Hinzufügen von opengl32.lib eigentlich notwendig? Ich kann mein (sehr einfaches) Programm ohne es zusammenstellen, aber mehr als eine Person hat gesagt, dass es erforderlich ist, vielleicht für ältere Versionen von Visual Studio?


5
2018-03-17 22:33


Ursprung


Antworten:


Möglicherweise bereits beantwortet: Freeglut Fehler LNK1104

Auch zwei Dinge zu überprüfen:

  • Bauen Sie im Debug- oder Release-Modus? Das d am Ende von freeglutd.lib schlägt vor, dass es eine Bibliothek für Debug-Builds ist
  • Versuchen Sie, ein neues Projekt von Grund auf neu zu erstellen, geben Sie einen einfachen runnbaren Code ein, der freetGLUT verwendet, und prüfen Sie, ob VS korrekt verknüpft ist. Dadurch wird auch überprüft, ob die Projektdatei des vorherigen Projekts beschädigt wurde (wie von @RobertHarvey vorgeschlagen) oder das Problem woanders liegt

1
2018-03-17 22:42



wenn Sie das freeglut_std.h (freeglut V3.0) überprüfen:

            /* Link with Win32 shared freeglut lib */
#           if FREEGLUT_LIB_PRAGMAS
#               ifdef NDEBUG
#                   pragma comment (lib, "freeglut.lib")
#               else
#                   pragma comment (lib, "freeglutd.lib")
#               endif
#           endif

Wenn Sie also NDEBUG nicht definieren, verlinkt der Linker auf "freeglutd.lib", Sie können das lösen, indem Sie ein NDEBUG in "PreprocessorDefinitions" definieren. Viel Glück!


4
2017-09-29 13:50



Ich habe dieses Problem gelöst, indem ich freglut und freeglut_static von der generierten CMake-Lösung im Debug-Modus kompiliert habe - freeglutd wurde im lib / Debug-Verzeichnis erstellt. Sie können dieses Verzeichnis dann in den lib Pfad stellen und es wird funktionieren!


0
2018-04-29 06:15



Hey Mann, ich weiß nicht, ob du immer noch diesen Fehler hast, aber hier ist eine Lösung. So ziemlich die "freeglutd.lib" hat mit dem Debuggen zu tun, daher das "d" am Ende, also was ich getan habe, war:

Eigenschaften> C / C ++> Präprozessor> Präprozessordefinitionen und gib NDEBUG ein. Dann OK und Sich bewerben.

Was dies bedeutet ist in der „freeglut_std.h“ gibt es eine ifdef für NDEBUG, dass, wenn es dann „freeglut.lib“ sonst verwenden definiert ist es die „freeglutd.lib“ zu verwenden, geht. Indem Sie es in den Präprozessor-Definitionen definieren, verwenden Sie nun die "freeglut.lib". Hoffentlich hilft dir das weiter!


0
2018-03-27 14:02