20160614:
我有MacPorts安装的glfw。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
来检查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和MacBookPro),MacPorts和Xcode以及CMake和System的版本都是一样的:
Mac操作系统:10.11.5Mac端口2.3.4C制造商:3.5.2Xcode:7.3
CMakeLists的两个版本(上面的文件1和文件2)都可以在MacMini中工作,链接器工作正常。但当它出现在我的MacBookPro上时,glfw并没有很好地联系起来。
其他人也遇到了几乎相同的问题:
macports cmake使dyld库未加载
这个问题与系统变量有关吗?
经过几个小时的搜索,我发现了原因:glfw@3.2:install_name没有正确设置
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