2016-09-15 1 views
5
So

Verknüpfung Fehler, ich freeglut bin mit zu versuchen, einige openGL Dinge zu tun, aber ich immer wieder sagen immer Fehler, dass Verweise nicht definiert sind:in OpenGL freeglut in CLION

CMakeFiles\texture_mapping.dir/objects.a(TextureMapper.cpp.obj): In function `ZN13TextureMapper4initEv': 
.../TextureMapper.cpp:20: undefined reference to `[email protected]' 
.../TextureMapper.cpp:23: undefined reference to `[email protected]' 
.../TextureMapper.cpp:24: undefined reference to `[email protected]' 
.../TextureMapper.cpp:25: undefined reference to `[email protected]' 
CMakeFiles\texture_mapping.dir/objects.a(TextureMapper.cpp.obj): In function `ZN13TextureMapper7displayEv': 
.../TextureMapper.cpp:45: undefined reference to `[email protected]' 
...TextureMapper.cpp:48: undefined reference to `[email protected]' 
...TextureMapper.cpp:49: undefined reference to `[email protected]' 
...TextureMapper.cpp:52: undefined reference to `[email protected]' 
...TextureMapper.cpp:53: undefined reference to `[email protected]' 
...TextureMapper.cpp:54: undefined reference to `[email protected]' 
...TextureMapper.cpp:55: undefined reference to `[email protected]' 
...TextureMapper.cpp:58: undefined reference to `[email protected]' 
...TextureMapper.cpp:61: undefined reference to `[email protected]' 

ich MinGW bin mit zu mit CLION Mach dieses Projekt. Ich dachte, dass ich alles richtig verstanden habe. Ich zog die entsprechenden Dateien in den Ordner include in MinGW, sowie den Ordner bin und auch den Ordner lib. Dann habe ich in meinem CMakeLists.txt:

cmake_minimum_required(VERSION 3.3) 
project(texture_mapping) 
find_package(OpenGL REQUIRED) 
find_package(GLUT REQUIRED) 

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

set(SOURCE_FILES main.cpp TextureMapper.cpp TextureMapper.h Vertex.h ObjParser.cpp ObjParser.h) 

add_executable(texture_mapping ${SOURCE_FILES}) 
target_link_libraries(texture_mapping libfreeglut.a libfreeglut_static.a) 

Die Bibliotheken I verknüpft die einzigen Bibliotheksdateien waren die freeglut kam mit.

Also, was fehlt mir? CLion zeigt keine Fehler an, bevor es kompiliert wird. Ich kann sogar auf die Funktionen in den von freeglut bereitgestellten Header-Dateien zugreifen. Warum sind diese Funktionen in meinem Programm nicht definiert?

+0

Ihr Problem hat nichts mit CLion zu tun. Es geht nur um CMake und deine Umgebung. – Sergey

Antwort

1

Sie haben OpenGL nicht mit Ihrem Projekt verknüpft, Sie erhalten also undefinierte Verweise auf OpenGL-Funktionen. Versuchen

target_link_libraries(texture_mapping libfreeglut.a libfreeglut_static.a) 

mit

target_link_libraries(texture_mapping libfreeglut.a libfreeglut_static.a GL) 

ich Ihr Problem mit Ihrem CMakeLists.txt reproduziert und das folgende Programm zu ersetzen:

#include <GL/gl.h> 

int main() { 
     glClear(GL_COLOR_BUFFER_BIT); 
     return 0; 
} 

und löste es mit dem obigen Ersatz. Die Lösung automatisch verbindet GL-Bibliothek aus meiner Bibliothek Pfad:

$ ls -1 /usr/lib64/libGL.* 
/usr/lib64/libGL.la 
/usr/lib64/libGL.so 
/usr/lib64/libGL.so.1 
/usr/lib64/libGL.so.1.0.0 

UPDATE

Nach this, haben Sie einige Variablen Ihre aktuelle OpenGL-Bibliotheken zugreifen. Zum Beispiel können zeigen Sie Bibliotheksdatei (en) direkt so OpenGL:

target_link_libraries(texture_mapping libfreeglut.a libfreeglut_static.a ${OPENGL_gl_LIBRARY}) 

Auch Sie können hinzufügen, OpenGL-Bibliothek-Verzeichnis in die library search path (tut es vor target_link_libraries):

link_directories(${OPENGL_gl_LIBRARY}) 
+0

Ich bekomme 'c:/mingw/bin/../ lib/gcc/mingw32/4.8.1 /../../../../mingw32/ bin/ld.exe: kann '-lGL' nicht finden als ein Ergebnis davon. –

+0

@CacheStaheli Ich habe meine Antwort aktualisiert. Das sollte funktionieren, da es Ihre tatsächliche Umgebung berücksichtigt. – Sergey

+0

Sobald ich den 'link_directories' Aufruf zusammen mit der zusätzlichen Bibliothek (' $ {OPENGL_gl_LIBRARY} ') in' target_link_libraries' hinzugefügt habe, hat es prächtig funktioniert. Vielen Dank! –