2016-07-08 13 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のを伝えることができますどのように to:

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

qmakeでこれを行う方法はありますか?私はinstall_name_toolでこれを変更する方法を知っていますが、私はそれを.proファイルに直接追加したいと思います。私がこれまでにやった


私はライブラリがビルド時に位置してパスを含めるために、バイナリのRPATHに変更することが私のプロファイルを変更:

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) 

この方法で、私は単にinstall_name_toolを使わずにリリースのrpathを変更することができます。しかし、このために仕事に、私は最初の行を変更する必要があります。アプリケーションのための私のプロファイルで

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

、私は次のように指定:

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

欠けている最後の作品はどのようにあります@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

ありがとう、これら2つのファイルは非常に便利で、問題の解決に役立ちました。 – Felix

+0

@Felixあなたはinstall_name_toolのやり方を教えてください。この質問をご覧ください:https://stackoverflow.com/questions/46088104/adding-external-libraries-deploying-qt-app-mac-osx – arqam

答えて

1

おかげで、私は問題を解決することができました:

私はプロファイルライブラリに

QMAKE_LFLAGS_SONAME = -Wl,-install_name,@rpath/ 

を追加する必要がありました。この方法でQtはフレームワークへの参照を作成するときに自動的に@rpath/QSettingsDialog.framework/Versions/0/QSettingsDialogを使います。

関連する問題