2016-06-14 157 views
1

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

关注这个问题,系统变量?

回答

0
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}) 

看一看到文档: http://www.glfw.org/docs/3.0/build.html

+0

按照你的建议,我用'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

+0

使用'message'打印'GLFW_LIBRARIES'的值。也许还可以删除CMakeCache.txt文件。 – usr1234567

+0

尝试删除无关文件(CMakeCache.txt ...)的方法,没有发生奇迹。通过'message'我可以看到GLFW_LIB是正确的:/opt/local/lib/libglfw.3.dylib,但是当它进入二进制文件时,发生了错误。我真的想知道是什么导致了差异。 – everding

2

搜索小时后,我找到了原因:glfw @3.2: install_name is not set properly

+1

您现在可以使用'sudo install_name_tool -id /opt/local/lib/libglfw.3.dylib/opt/local/lib/libglfw.3.dylib'修复此问题。这会将库的安装名称更改为正确的值。 – neverpanic

+0

谢谢。我知道install_name_tool可以更正值,我只想知道这是怎么发生的。无论如何,这个问题已经解决了。 – everding