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のコメント内のリンクに
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
ありがとう、これら2つのファイルは非常に便利で、問題の解決に役立ちました。 – Felix
@Felixあなたはinstall_name_toolのやり方を教えてください。この質問をご覧ください:https://stackoverflow.com/questions/46088104/adding-external-libraries-deploying-qt-app-mac-osx – arqam