2016-07-08 8 views
1

Qt로 사용자 정의 프레임 워크를 만들고 싶습니다. 나는 프레임 워크 자체를 만들 수 있어요,하지만 Qt는 실행할 때 프레임 워크를 찾는데 실패 :Qt : Mac에서 프레임 워크 연결하기 : rpath 사용하기

dyld: Library not loaded: QSettingsDialog.framework/Versions/0/QSettingsDialog 
    Referenced from: /Users/sky/QtProjects/build-QSettingsDialog-Desktop_Qt_5_7_0_clang_64bit-Debug/Examples/SimpleExample/SimpleExample.app/Contents/MacOS/SimpleExample 
    Reason: image not found 

이유는 간단하다 : 바이너리 어디 프레임 워크를 찾을 방법을 알고하지 않습니다.

나는 진에 otool 사용이보고 다음과 같이

otool -L Examples/SimpleExample/SimpleExample.app/Contents/MacOS/SimpleExample 
Examples/SimpleExample/SimpleExample.app/Contents/MacOS/SimpleExample: 
    QSettingsDialog.framework/Versions/0/QSettingsDialog (compatibility version 0.1.0, current version 0.1.2) 
    @rpath/QtWidgets.framework/Versions/5/QtWidgets (compatibility version 5.7.0, current version 5.7.0) 
    @rpath/QtGui.framework/Versions/5/QtGui (compatibility version 5.7.0, current version 5.7.0) 
    @rpath/QtCore.framework/Versions/5/QtCore (compatibility version 5.7.0, current version 5.7.0) 
    /System/Library/Frameworks/DiskArbitration.framework/Versions/A/DiskArbitration (compatibility version 1.0.0, current version 1.0.0) 
    /System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0) 
    /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0) 
    /System/Library/Frameworks/AGL.framework/Versions/A/AGL (compatibility version 1.0.0, current version 1.0.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) 

그래서, 내 질문은 (자세한 내용은 아래의 물건을 확인 용) : 내 라이브러리의 경로를 설정 qmake를 말할 수있는 방법 받는 사람 :

@rpath/QSettingsDialog.framework/Versions/0/QSettingsDialog (compatibility version 0.1.0, current version 0.1.2) 

qmake를 사용하여이 작업을 수행 할 수있는 방법이 있습니까? install_name_tool으로 변경하는 방법을 알고 있지만 .pro 파일에 직접 추가하고 싶습니다.


는 지금까지 무슨 짓을 :

otool -l Examples/SimpleExample/SimpleExample.app/Contents/MacOS/SimpleExample 
Load command 22 
      cmd LC_RPATH 
     cmdsize 136 
     path /Users/sky/QtProjects/build-QSettingsDialog-Desktop_Qt_5_7_0_clang_64bit-Debug/Examples/SimpleExample/../../QSettingsDialog (offset 12) 
Load command 23 
      cmd LC_RPATH 
     cmdsize 48 
     path /Users/sky/Qt/5.7/clang_64/lib (offset 12) 

:

나는 라이브러리가 빌드시에있는 경로를 포함하는 바이너리의 RPATH로 변경 내 프로 파일을 수정 한 이 방법을 사용하면 install_name_tool을 사용하지 않고도 rpath를 간단히 수정할 수 있습니다. 이 작업을 위해 그러나, 나는에 첫 번째 줄 변경해야

mac { 
    QMAKE_LFLAGS += -F$$OUT_PWD/../../QSettingsDialog/ 
    QMAKE_LFLAGS += '-Wl,-rpath,\'$$OUT_PWD/../../QSettingsDialog\'' 
    LIBS += -F$$OUT_PWD/../../QSettingsDialog/ -framework QSettingsDialog 
} 

마지막 누락 된 조각 방법입니다 : 응용 프로그램에 대한 내 프로 파일에서

@rpath/QSettingsDialog.framework/Versions/0/QSettingsDialog (compatibility version 0.1.0, current version 0.1.2) 

을, 나는 다음과 같은 지정 @rpath/을 추가하십시오. 당신의 도움을 주셔서 감사합니다.

나는 라이브러리 프로 파일을

QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/ 

를 추가했다 : @peppe의 코멘트에있는 링크에

+2

아마도 Qt Creator가 수행하는 해킹을 살펴보십시오. Cf. https://code.qt.io/cgit/qt-creator/qt-creator.git/tree/src/qtcreatorlibrary.pri 및 https://code.qt.io/cgit/qt-creator/qt-creator. git/tree/src/rpath.pri – peppe

+0

감사합니다.이 두 파일은 매우 편리하게 제공되어 문제를 해결하는 데 도움이되었습니다. – Felix

+0

@Felix install_name_tool을 사용하는 방법을 알려주시겠습니까? 이 질문을보십시오 : https://stackoverflow.com/questions/46088104/adding-external-libraries-deploying-qt-app-mac-osx – arqam

답변

1

덕분에, 나는 문제를 해결할 수 있었다. Qt는 프레임 워크에 대한 참조를 만들 때 자동으로 @rpath/QSettingsDialog.framework/Versions/0/QSettingsDialog을 사용합니다.