2015-03-17 34 views
5

Próbuję skompilować program OpenGL przy użyciu programu Visual Studio 2013, ale pojawia się następujący błąd:Dlaczego program Visual Studio próbuje połączyć "freeglutd.lib"?

Error 1 error LNK1104: cannot open file 'freeglutd.lib' ...

Dla porównania, mam freeglut zainstalowany i skonfigurowany VS szukać poprawnych katalogów dla plików włączanych i pliki biblioteki. Rzeczywiście, VS rozpoznaje, że pliki zawierające GLUT są w porządku. Dodałem także opengl32.lib i freeglut.lib do dodatkowych zależności .

Dlaczego VS szuka "freeglutd.lib"? Z pewnością nie jest wymieniony w Dodatkowych zależnościach. Mogę rozwiązać błąd kompilacji, zmieniając nazwę pliku "libglut.lib" na "libglutd.lib" i usuwając poprzedni z zależności, ale jestem po prostu ciekawy, dlaczego zachowuje się w ten sposób.

Mówiąc o dodatnich zależnościach, czy konieczne jest dodanie pliku opengl32.lib? Mogę skompilować mój (bardzo podstawowy) program bez niego, ale więcej niż jedna osoba powiedziała, że ​​jest to wymagane, być może dla starszych wersji Visual Studio?

+0

Spróbuj wykonać wyszukiwanie w całym pliku 'libglutd.lib' i zobacz, co się pojawi. Podejrzewam, że jeden z plików XML projektu jest nieco uszkodzony. –

+0

@Robert Harvey: Przeszukałem całe rozwiązanie dla 'libglutd.lib' i' freeglutd.lib' (domyślam się, że o to ci chodziło), ale nic nie znaleziono. Edycja: Sprawdziłem również plik dziennika, a polecenie link nie ma "freeglutd.lib" jako biblioteki. – someguy

Odpowiedz

1

Prawdopodobnie już odpowiedział: freeglut error LNK1104

również dwie rzeczy do sprawdzenia:

  • Czy budujecie w trybie debug lub zwolnić? Na końcu freeglutd.lib pod adresem d zasugerowano, że jest to biblioteka przeznaczona do kompilacji debugowania. Spróbuj utworzyć nowy projekt od podstaw, umieść w nim kod bazowy działający w trybie freeGLUT i zobacz, czy VS poprawnie łączy. Będzie to również sprawdzić, czy z jakiegoś powodu plik projektu z poprzedniego projektu został uszkodzony (jak sugeruje @RobertHarvey) lub problem jest gdzieś indziej
+0

Spojrzałem na tę odpowiedź wcześniej i niestety to nie pomogło. Próbowałem trybu debugowania i zwolnienia. Zrobiłem to, co sugerowałeś i stworzyłeś nowy projekt, ale bez powodzenia. – someguy

+1

Hmm, interesujące. Przy okazji koniec twojego pytania - tak, opengl jest potrzebny jako zależność, ponieważ freeGLUT używa OpenGL, ale obejmuje część jego złożoności (tworzenie okien, obsługa zdarzeń wejściowych, inicjalizacja materiałów OpenGL itp. Czy możesz opublikować zrzut ekranu swojego ustawienia projektu (łączenie zależności, nagłówki itp.) OpenGL nie wymaga freeGLUT, ale mam wrażenie, że piszesz gdzieś kod OpenGL, gdzie freeGLUT jest używane zamiast czystego OpenGL stąd zależność od freeGLUT. – rbaleksandar

+1

Właśnie zdałem sobie sprawę, że nie stosowałem sugestii z połączonej odpowiedzi. Zdefiniowałem te makra * po *, w tym 'GL/glut.h', co jest bezcelowe. Mogę teraz powiedzieć, że problem polega na tym, że 'FREEGLUT_LIB_PRAGMAS' jest równe 1. Dokładniej, jeśli jest równe 1,' GL/freeglut_std.h' spróbuje połączyć 'libglutd.lib', jeśli' NDEBUG' nie jest zdefiniowany. Jest więc przeznaczony do kompilacji debugowania, ale tryb Release nie definiuje domyślnie NDEBUG. PS po sprawdzeniu pliku nagłówkowego glut, 'opengl32.lib' jest połączony, jeśli' FREEGLUT_LIB_PRAGMAS' ma wartość 1. – someguy

4

jeśli sprawdzeniu freeglut_std.h (freeglut V3.0):

  /* 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 

więc jeśli nie definiują NDEBUG, łącznik będzie link do „freeglutd.lib” że można rozwiązać poprzez zdefiniowanie NDEBUG w „PreprocessorDefinitions”. Powodzenia!

+0

Wspomniałem o tym w sekcji komentarzy innych odpowiedzi. Wciąż jednak doceniane. Dzięki! – someguy

0

Rozwiązałem ten problem, kompilując freeglut i freeglut_static z wygenerowanego CMut soluton w trybie debugowania - freeglutd został stworzony w katalogu lib/Debug. Możesz umieścić ten katalog na ścieżce do biblioteki i będzie działać!

Powiązane problemy