2016-06-14 4 views
1

20160614 :CMake가 osx 바로 아래에서 glfw를 연결하지 않습니다.

저는 MacPorts에서 glfw를 설치했습니다. sudo port install glfw 그리고 /opt/local/lib/libglfw.dylib가 있는지 확인했습니다.

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

오류가, 내가 그런 ./t1 에 의해 실행되지 것으로보고있다 cmake . && make을 한 후 여기에

는 MAIN.CPP 내 최고 헤더입니다 오류가 와서 :

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

가 그럼 난를 사용는 T1에서 LIB dependens을 확인

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

나는 (MacMini와 맥북 프로), MacPorts를하고 엑스 코드와 CMake 및 시스템의 버전이 모두 두 OSX 장치가 같은 :

맥 OS X : 10.11.5 MacPorts를 2.3.4 CMake : 3.5.2 엑스 코드 : 7.3

,536,

CMakeLists (위의 file1과 file2)의 두 버전 모두 MacMini에서 작동하며 링커가 정상적으로 작동합니다. 하지만 내 MacBookPro에 연결하면 glfw가 잘 연결되지 않습니다.

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

이 문제를 시스템 변수가

을 우려하고있다 : 다른

누군가가 거의 같은 문제가 발생했다?

답변

0
set(GLLIBS GL glfw glew) 

CMake를 사용하는 방법이 아닙니다. 시간 검색 후, 나는 그 이유를 찾을 http://www.glfw.org/docs/3.0/build.html

+0

귀하의 조언에 따라, 나는 libglfw을 찾기 위해'find_library'를 사용 find_library 또는

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

이 문서에 보라 사용합니다. dylib 경로. 'find_library (GLFW_LIB glfw 힌트/opt/local/lib)'. 메시지'으로 ($ {GLFW_LIB})', cmake /opt/loca/lib/libglfw.dylib에있는,하지만 여전히 생성 된 바이너리 파일 오류보고 glfw lib 디렉토리 검색 : dyld을 : 도서관로드되지를 : LIB /libglfw.3.dylib – everding

+0

'GLFW_LIBRARIES'의 값을 출력하기 위해'message'를 사용하십시오. CMakeCache.txt 파일을 삭제할 수도 있습니다. – usr1234567

+0

관련없는 파일 (CMakeCache.txt ...)을 삭제하는 방법이 시도되었지만 기적이 발생하지 않았습니다. 'message'에 의해 GLFW_LIB가 올바르다는 것을 알 수 있습니다 : /opt/local/lib/libglfw.3.dylib하지만, 바이너리가되면 뭔가 잘못되었습니다. 나는 진짜로 차이를 만드는 무슨을 알고 싶다. – everding

2
+1

당신은'sudo install_name_tool -id /opt/local/lib/libglfw.3.dylib/opt/local/lib/libglfw.3.dylib'을 사용하여 이것을 고칠 수 있습니다. 이렇게하면 라이브러리의 설치 이름이 올바른 값으로 변경됩니다. – neverpanic

+0

감사합니다. 나는 install_name_tool이 값을 교정 할 수 있음을 알고 있었고, 나는 이것이 어떻게 일어 났는지 알고 싶다. 어쨌든, 문제는 해결되었습니다. – everding