CMake没有链接到osx下的glfw
20160614:CMake没有链接到osx下的glfw
我有glfw由MacPorts安装。 sudo port install glfw
我检查了/opt/local/lib/libglfw.dylib存在。
这里是我的main.cpp的顶部标题:
#include <GLFW/glfw3.h>
我的CMakeLists.txt(文件1):
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(文件2)后:
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和MacBook Pro的),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
关注这个问题,系统变量?
set(GLLIBS GL glfw glew)
这不是你应该如何使用CMake。使用find_library
或
pkg_search_module(GLFW REQUIRED glfw3)
include_directories(${GLFW_INCLUDE_DIRS})
target_link_libraries(simple ${GLFW_LIBRARIES})
搜索小时后,我找到了原因:glfw @3.2: install_name is not set properly
您现在可以使用'sudo install_name_tool -id /opt/local/lib/libglfw.3.dylib/opt/local/lib/libglfw.3.dylib'修复此问题。这会将库的安装名称更改为正确的值。 – neverpanic
谢谢。我知道install_name_tool可以更正值,我只想知道这是怎么发生的。无论如何,这个问题已经解决了。 – everding
按照你的建议,我用'find_library'找到libglfw。 dylib路径。 'find_library(GLFW_LIB glfw HINTS/opt/local/lib)'。 通过'message($ {GLFW_LIB})',cmake找到位于/opt/loca/lib/libglfw.dylib但仍生成的二进制文件报告错误的glfw库: dyld:Library not loaded:lib /libglfw.3.dylib – everding
使用'message'打印'GLFW_LIBRARIES'的值。也许还可以删除CMakeCache.txt文件。 – usr1234567
尝试删除无关文件(CMakeCache.txt ...)的方法,没有发生奇迹。通过'message'我可以看到GLFW_LIB是正确的:/opt/local/lib/libglfw.3.dylib,但是当它进入二进制文件时,发生了错误。我真的想知道是什么导致了差异。 – everding