20160614:CMake не связывает glfw прямо под osx
У меня есть glfw, установленный MacPorts. sudo port install glfw
И я проверил, что /opt/local/lib/libglfw.dylib существует.
Вот мой главный заголовок main.cpp:
#include <GLFW/glfw3.h>
Мои 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})
После cmake . && make
, который никакой ошибки не сообщили, я выполняю по ./t1
Тогда Пришла ошибка:
dyld: Library not loaded: lib/libglfw.3.dylib
Referenced from: /Users/...../t1
Reason: image not found
[1] 13949 trace trap ./t1
Затем я использую otool -L t1
проверить Lib dependens в 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)
Может кто-нибудь сказать мне, почему glfw не связан правильно?
20160615:
После изменения моего CMakeLists.txt (file2):
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})
У меня есть два OSX устройства (MacMini и MacBookPro), версия MacPorts и Xcode и CMake и система все то же самое:
Mac OSX: 10.11.5 MacPorts 2.3.4 CMake: 3.5.2 Xcode: 7,3
Обе версии CMakeLists (file1 и file2 выше) работают в MacMini, компоновщик работает отлично. Но когда он ссылается на мой MacBookPro, glfw плохо связан.
Кто-то должен был столкнуться с почти такая же проблема:
macports-cmake-make-dyld-library-not-loaded
заинтересованная эта проблема системная переменная?
Следуя вашему совету, я использую 'find_library' найти libglfw. путь dylib. 'find_library (GLFW_LIB glfw HINTS/opt/local/lib)'. By 'message ($ {GLFW_LIB})', cmake найти glfw lib, который находится в /opt/loca/lib/libglfw.dylib, но все же сгенерированный двоичный файл сообщает об ошибке: dyld: Библиотека не загружена: lib /libglfw.3.dylib – everding
Используйте 'message' для печати значений' GLFW_LIBRARIES'. Возможно также удалить файл CMakeCache.txt. – usr1234567
Был опробован метод удаления несвязанных файлов (CMakeCache.txt ...), ничего чуда не произошло. Под «сообщением» я вижу, что GLFW_LIB прав: /opt/local/lib/libglfw.3.dylib, но когда он идет в двоичном формате, что-то не так. Я действительно хочу знать, что делает различия. – everding