2016-06-14 23 views
1

20160614:CMake verbindet nicht glfw unter osx

Ich habe glfw von MacPorts installiert. sudo port install glfw Und ich habe überprüft, dass /opt/local/lib/libglfw.dylib existiert.

Hier ist meine Top-Header main.cpp:

#include <GLFW/glfw3.h> 

Mein CMakeLists.txt (file1):

cmake_minimum_required (VERSION 2.8) 
project (t1) 
include_directories(/opt/local/include) 
link_directories(/opt/local/lib) 
# find_library(MYGLFWLIB NAMES glfw HINTS /opt/local/lib NO_DEFAULT_PATH) 
set(GLLIBS GL glfw glew) 
add_executable(t1 main.cpp) 
target_link_libraries(t1 ${GLLIBS}) 

Nach cmake . && make die berichteten kein Fehler ist, ich dann von ./t1 ausführen Fehler kam:

dyld: Library not loaded: lib/libglfw.3.dylib 
Referenced from: /Users/...../t1 
Reason: image not found 
[1] 13949 trace trap ./t1 

Dann verwende ich otool -L t1 zu überprüfen lib dependens in t1

/opt/local/lib/libGL.1.dylib (compatibility version 4.0.0, current version 4.0.0) 
lib/libglfw.3.dylib (compatibility version 3.0.0, current version 3.2.0) 
/opt/local/lib/libGLEW.1.13.0.dylib (compatibility version 1.13.0, current version 1.13.0) 
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 120.1.0) 
    /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1) 

Könnte mir jemand sagen, warum GLFW nicht richtig verbunden ist?

20160615:

meine CMakeLists.txt (file2) Nach der Änderung:

cmake_minimum_required (VERSION 2.8) 

project (t1) 

include_directories(/opt/local/include) 
link_directories(/opt/local/lib) 

find_library(GL_LIB GL HINTS /opt/local/lib) 
find_library(GLFW_LIB glfw HINTS /opt/local/lib) 
find_library(GLEW_LIB glew HINTS /opt/local/lib) 

message(${GLFW_LIB}) 
message(${GLEW_LIB}) 
message(${GL_LIB}) 

add_executable(t1 main.cpp) 
target_link_libraries(t1 ${GL_LIB} ${GLFW_LIB} ${GLEW_LIB}) 

Ich habe zwei osx Gerät (MacMini und MacBookPro), die Version von MacPorts und Xcode und CMake und System alle sind das gleiche:

Mac OS X: 10.11.5 MacPorts 2.3.4 CMake: 3.5.2 Xcode 7.3

Beide Versionen von CMakeLists (file1 und file2 oben) funktionieren in MacMini, linker funktioniert gut. Aber wenn es zu meinem MacBookPro kam, ist GLFW nicht gut verbunden.

Jemand anderes hatte das fast gleiche Problem auftreten:

macports-cmake-make-dyld-library-not-loaded

Ist das Problem der Systemvariablen betroffen?

Antwort

0
set(GLLIBS GL glfw glew) 

Das ist nicht, wie Sie CMake verwenden sollten. Verwenden Sie find_library oder

pkg_search_module(GLFW REQUIRED glfw3) 
include_directories(${GLFW_INCLUDE_DIRS}) 
target_link_libraries(simple ${GLFW_LIBRARIES}) 

Werfen Sie einen Blick in die Dokumentation: http://www.glfw.org/docs/3.0/build.html

+0

Ihren Rat folgend, verwende ich 'find_library' libglfw zu finden. Dylib Pfad. 'find_library (GLFW_LIB glfw Hinweise/opt/local/lib)'. Durch 'Nachricht ($ {GLFW_LIB})', CMake finden Sie die GLIFW-Lib, die in /opt/loca/lib/libglfw.dylib, aber immer noch die generierte Binärdatei gemeldet Fehler: dyld: Bibliothek nicht geladen: lib /libglfw.3.dylib – everding

+0

Verwenden Sie "Nachricht" zum Drucken der Werte von 'GLFW_LIBRARIES'. Löschen Sie möglicherweise auch die CMakeCache.txt-Datei. – usr1234567

+0

Die Methode zum Löschen von nicht verwandten Dateien (CMakeCache.txt ...) wurde versucht, nichts Wunder geschah. Mit "message" kann ich sehen, dass die GLFW_LIB richtig ist: /opt/local/lib/libglfw.3.dylib, aber wenn es in die Binärdatei geht, ist etwas falsches passiert. Ich möchte wirklich wissen, was die Unterschiede ausmacht. – everding

2

Nach Suche nach Stunden, ich den Grund gefunden: glfw @3.2: install_name is not set properly

+1

Sie können dies jetzt mit 'sudo install_name_tool -id /opt/local/lib/libglfw.3.dylib/opt/local/lib/libglfw.3.dylib' beheben. Dies ändert den Installationsnamen der Bibliothek auf den korrekten Wert. – neverpanic

+0

Danke. Ich wusste, dass install_name_tool den Wert korrigieren kann, ich möchte nur wissen, wie das passiert ist. Wie auch immer, das Problem wurde gelöst. – everding