2

次のチュートリアルを実行しました: http://qt-project.org/doc/qt-4.8/deployment-mac.html#the-bundle

アプリで otool を実行すると、次のようになります。

qjson.framework/Versions/0/qjson (compatibility version 0.7.0, current version 0.7.1)
libboost_date_time.dylib (compatibility version 0.0.0, current version 0.0.0)
libQt.Shared.1.dylib (compatibility version 1.0.0, current version 1.0.0)
libQt.Framework.1.dylib (compatibility version 1.0.0, current version 1.0.0)
@executable_path/../Frameworks/QtGui.framework/Versions/4/QtGui (compatibility version 4.8.0, current version 4.8.1)
@executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore (compatibility version 4.8.0, current version 4.8.1)
@executable_path/../Frameworks/QtNetwork.framework/Versions/4/QtNetwork (compatibility version 4.8.0, current version 4.8.1)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 625.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)

私がこれを行う前は、問題なく動作し、これを指していました:

    /Users/me/QtSDK1.2.1/Desktop/Qt/4.8.1/gcc/lib/QtGui.framework/Versions/4/QtGui (compatibility version 4.8.0, current version 4.8.1)
/Users/me/QtSDK1.2.1/Desktop/Qt/4.8.1/gcc/lib/QtCore.framework/Versions/4/QtCore (compatibility version 4.8.0, current version 4.8.1)
/Users/me/QtSDK1.2.1/Desktop/Qt/4.8.1/gcc/lib/QtNetwork.framework/Versions/4/QtNetwork (compatibility version 4.8.0, current version 4.8.1)

アプリを開くと、すぐにクラッシュします。ターミナルで開こうとすると、次の問題が発生します。

objc[44337]: Class QNSImageView is implemented in both 
/Users/me/MyApp/MyApp.app/Contents/MacOS/./../Frameworks/QtGui.framework/Versions/4/QtGui and /Users/me/QtSDK1.2.1/Desktop/Qt/4.8.1/gcc/lib/QtGui.framework/Versions/4/QtGui. One of the two will be used. Which one is undefined.

「セグメントフォルト」で終了

競合しないようにするにはどうすればよいですか?Qts デプロイ スクリプトを実行しようとしましたが、うまくいきませんでした。私は何を間違っていますか?

編集:

私は彼らのスクリプトをもう一度使用しようとしましたが、今回は次のようにしました。

macdeployqt MyApp.app -dmg -no-plugins

これにより、実行されるアプリを含む .dmg が作成されました。問題は、何も起こらず、ターミナルで実行したときに次のエラーが発生したことです。

QEventLoop: Cannot be used without QApplication
QEventLoop: Cannot be used without QApplication

私のイベントループはどうなりましたか? ファインダーから完全に実行して以来、アプリをデプロイしてデプロイバージョンから実行したときから、アプリに変更はありません。意味がありません

更新: 今、古いアプリを削除し、QtCreator を使用してゼロからビルドしようとしました。次に、次のことを行いました。

bash-3.2$ /Users/me/Downloads/macdeployqt-build-desktop-Desktop_Qt_4_8_1_for_GCC__Qt_SDK__Release/macdeployqt/macdeployqt MyApp.app
copied "/Library/Frameworks/qjson.framework/Versions/0/qjson" to "MyApp.app/Contents/Frameworks/qjson.framework/Versions/0/qjson" 
copied "/usr/lib/libboost_date_time.dylib" to "MyApp.app/Contents/Frameworks//libboost_date_time.dylib" 
copied "/usr/lib/libQt.Shared.1.dylib" to "MyApp.app/Contents/Frameworks//libQt.Shared.1.dylib" 
copied "/usr/lib/libQt.Framework.My.1.dylib" to "MyApp.app/Contents/Frameworks//libQt.Framework.My.1.dylib" 
copied "/Users/me/QtSDK1.2.1/Desktop/Qt/4.8.1/gcc/lib/QtGui.framework/Versions/4/QtGui" to "MyApp.app/Contents/Frameworks/QtGui.framework/Versions/4/QtGui" 
copied "/Users/me/QtSDK1.2.1/Desktop/Qt/4.8.1/gcc/lib/QtGui.framework/Resources/qt_menu.nib/classes.nib" to "MyApp.app/Contents/Frameworks/QtGui.framework/Resources/qt_menu.nib/classes.nib" 
copied "/Users/me/QtSDK1.2.1/Desktop/Qt/4.8.1/gcc/lib/QtGui.framework/Resources/qt_menu.nib/info.nib" to "MyApp.app/Contents/Frameworks/QtGui.framework/Resources/qt_menu.nib/info.nib" 
copied "/Users/me/QtSDK1.2.1/Desktop/Qt/4.8.1/gcc/lib/QtGui.framework/Resources/qt_menu.nib/keyedobjects.nib" to "MyApp.app/Contents/Frameworks/QtGui.framework/Resources/qt_menu.nib/keyedobjects.nib" 
copied "/Users/me/QtSDK1.2.1/Desktop/Qt/4.8.1/gcc/lib/QtCore.framework/Versions/4/QtCore" to "MyApp.app/Contents/Frameworks/QtCore.framework/Versions/4/QtCore" 
copied "/Users/me/QtSDK1.2.1/Desktop/Qt/4.8.1/gcc/lib/QtNetwork.framework/Versions/4/QtNetwork" to "MyApp.app/Contents/Frameworks/QtNetwork.framework/Versions/4/QtNetwork" 
copied "/Users/me/QtSDK1.2.1/Desktop/Qt/4.8.1/gcc/lib/QtXml.framework/Versions/4/QtXml" to "MyApp.app/Contents/Frameworks/QtXml.framework/Versions/4/QtXml" 

Deploying plugins from "/usr/plugins"
Created configuration file: "MyApp.app/Contents/Resources/qt.conf" 
This file sets the plugin search path to "MyApp.app/Contents/plugins" 

起動すると、以前と同じようにクラッシュします。私の2つのライブラリ「libQt.Shared.1.dylib」と「libQt.Framework.1.dylib」はそれと呼ばれていませんが、両方ともそれらの名前のシンボリックリンクを持っています。それはクラッシュと関係があるのでしょうか?それとも、リンクを壊してコピーしますか? これらの 2 つのライブラリは、自分で作成したライブラリであり、どちらも QtCore と QtNetwork を使用しています。ただし、 otool を使用すると、アプリは適切なものに注意を向けているように見えます。

@executable_path/../Frameworks/qjson.framework/Versions/0/qjson (compatibility version 0.7.0, current version 0.7.1)
@executable_path/../Frameworks/libboost_date_time.dylib (compatibility version 0.0.0, current version 0.0.0)
@executable_path/../Frameworks/libQt.Shared.1.dylib (compatibility version 1.0.0, current version 1.0.0)
@executable_path/../Frameworks/libQt.Framework.My.1.dylib (compatibility version 1.0.0, current version 1.0.0)
@executable_path/../Frameworks/QtGui.framework/Versions/4/QtGui (compatibility version 4.8.0, current version 4.8.1)
@executable_path/../Frameworks/QtCore.framework/Versions/4/QtCore (compatibility version 4.8.0, current version 4.8.1)
@executable_path/../Frameworks/QtNetwork.framework/Versions/4/QtNetwork (compatibility version 4.8.0, current version 4.8.1)
/usr/lib/libstdc++.6.dylib (compatibility version 7.0.0, current version 7.9.0)
/usr/lib/libgcc_s.1.dylib (compatibility version 1.0.0, current version 625.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)

私を助けてください...

4

3 に答える 3

4

これは、PyQtアプリをパッケージ化するときにも見たことがあります。修正(通常はmacdeployqtによって行われます)は、アプリqt.confのディレクトリ内にファイルを配置することです。Contents/Resources通常は、プラグインディレクトリの名前が含まれています。

コンテンツ/リソース/qt.conf

[Paths]
Plugins = plugins

これにより、システムでQtライブラリを検索するのをやめることができます。-dmgこの状況とは関係がないので、フラグは必要ありません。クリーンビルドで実行macdeployqt MyApp.appして、qt.confが作成されるかどうかを確認することをお勧めします。

于 2012-05-23T05:25:59.303 に答える
2

「2つのうちの1つが使用されます。どちらが未定義ですか」というエラーを解決しました。Qt フレームワークが にインストールされているため/Library/Frameworks、アプリケーションの実行時に dyld もそこを参照します。Qt 関連のすべてのフレームワーク (フォノンのように "Qt" で始まらないものを含む) の名前を変更したので、それらはもう見つかりません。次に、Xcode からアプリケーションを再度実行したところ、実際にはすべての依存関係が含まれていないことがわかりました。たとえば、フォノン自体には QtDBus と QtXml が必要です。それらを自分のプロジェクトに追加するのを忘れていたので、dyld はたとえばグローバルを使用します。/Library/Frameworks/QtXml.framework、これは QtCore に依存します。しかし、QtCore はグローバル ディレクトリからも読み込まれ、あらゆる種類のエラーが発生する可能性があります。私の場合、アプリケーションは QWebpage コンストラクターで無期限にハングしていました。他の人はクラッシュを経験しているようです。もちろん、解決策は、必要なすべての Qt コンポーネントを ( 経由でinstall_name_tool) 独自のアプリケーションに含めてパッチを適用することです。

更新:グローバルなものの名前を元の名前に変更した後も、両方の場所が考慮されるため、まだ問題が発生しています。まだそれを解決しようとしています。記録のために、上記の回答をここに残しておきます。

于 2013-04-11T11:18:54.773 に答える
0

私は問題を見つけました。他の誰かが同じ問題を抱えている場合は、ここに私の回答を投稿します。

ローカル フレームワークを使用してビルドされていないランタイム中にロードしていたライブラリのことを完全に忘れていました。プラグインを削除すると、正常に動作し、すべてが正常になりました:)

于 2012-05-23T22:10:25.190 に答える