2016-08-02 31 views
0

Ich versuche OpenGL für eine Klasse zu lernen, habe aber Probleme mit der Einrichtung. Ich benutze Windows, mit der IDE CLion und cygwin64. Bis jetzt konnte ich Gl.h und Glu.h kompilieren und ausführen, aber ich habe Probleme, die statische Bibliothek für Freeglut zu bekommen.FreeGLUT-Bibliothek mit OpenGL arbeiten

Gerade jetzt Programme Fehler in der letzten Zeile in der CMakeLists.txt Datei:

cmake_minimum_required(VERSION 3.5) 
project(OpenGLAugust) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(SOURCE_FILES main.cpp) 
add_executable(OpenGLAugust ${SOURCE_FILES}) 
target_link_libraries(OpenGLAugust libopengl32.a libglu32.a libfreeglut.a) 

mit Fehler

cannot find -lfreeglut 
collect2: error: ld returned 1 exit status 

ich in sie sah und es scheint, dass freeglut nach dem Herunterladen ich erstellen müssen die Bibliotheksdateien (speziell die .a-Datei libfreeglut32.a) aus dem Quellcode. Ich habe versucht, eine Erklärung dafür zu finden, wie es gemacht wird, aber ich habe keine Antwort gefunden. Kann mir jemand erklären, wie man das macht?

Antwort

1

Im Gegensatz zu OpenGL, welche Verfügbarkeit in einer Compiler-Toolchain vom Windows ABI gefordert wird, ist FreeGLUT eine optionale 3rd-Party-Bibliothek, die separat installiert werden muss.

Am einfachsten wäre es, FreeGLUT-Quellen einfach in ein Unterverzeichnis Ihres Projekts zu legen und es einfach Ihrer CMakeLists.txt hinzuzufügen; FreeGLUT kommt mit einer gebrauchsfertigen CMake-Konfiguration, so dass es "einfach funktioniert".

Auf einer Seite beachten, sollten Sie nicht

target_link_libraries(OpenGLAugust libopengl32.a libglu32.a …) 

aber

find_package(OpenGL) 
target_link_libraries(OpenGLAugust 
    ${OPENGL_gl_LIBRARY} 
    ${OPENGL_glu_LIBRARY} 
    …) 

verwenden D.h. Insgesamt sollten Sie FreeGLUT-Quellen in ein Unterverzeichnis Ihres Projekts extrahieren und Ihre CMakeLists in

cmake_minimum_required(VERSION 3.5) 
project(OpenGLAugust) 
find_package(OpenGL) 
add_subdirectory(freeglut) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

set(SOURCE_FILES main.cpp) 
add_executable(OpenGLAugust ${SOURCE_FILES}) 
target_link_libraries(OpenGLAugust 
     ${OPENGL_gl_LIBRARY} 
     ${OPENGL_glu_LIBRARY} 
     freeglut_static) 
+0

ändern Jetzt bekomme ich einen Fehler von "konnte X11 nicht finden". Ich ging und heruntergeladen Cygwin/X einschließlich der X-Org-Server und Xinit, aber das funktioniert immer noch nicht. –

+1

@ChrisProcak: Nun, das Problem ist, dass Cygwin versucht, maximale Kompatibilität mit Linux zu bieten. Und in Linux macht man Grafiken über einen X-Server. Aber in Windows gibt es keinen X-Server (es sei denn, Sie starten den X-Server, der mit Cygwin geliefert wird, aber die OpenGL-Unterstützung ist bestenfalls mager). * Anstelle von Cygwin empfehle ich dringend, MinGW zu verwenden, um dein Projekt zu kompilieren. Der einfachste Weg, es zu installieren, ist, das MSys2-Installationsprogramm https://msys2.github.io/ zu verwenden, um eine MSys2-Umgebung zu erhalten, und dann mingw darin zu installieren. Dadurch erhalten Sie native OpenGL-Unterstützung, die Sie möchten. * – datenwolf