13

自分で作成したいくつかの共有ライブラリに依存するアプリケーション プロジェクトがあります。Qt 4.6 ドキュメント「Deploying an Application on Mac OSX」によると:

注: サードパーティ ライブラリをアプリケーション バンドルに含める場合は、そのライブラリの明示的な lib エントリをアプリケーションの .pro ファイルに追加する必要があります。そうしないと、macdeployqt ツールはサードパーティの .dylib をバンドルにコピーしません。

アプリケーションの .pro ファイルに lib エントリを追加しましたが、macdeployqt を実行しても、作成したライブラリがバンドルにコピーされません。私の .pro ファイルには次のものがあります。

LIBS += -L../Libraries -lMyLib

すべてが問題なくビルドされます。バンドルから実行しようとすると、「イメージが見つかりません」というエラーが発生します。

macdeployqt にバグがありますか、それとも .pro ファイルに何か追加する必要がありますか?

4

4 に答える 4

21

badcatは、Qt 4.6のドキュメントに、macdeployqtツールで何が可能かについての見方が大幅に膨らんでいることは正しいです。

私の経験では、macdeployqtによって実行されるのは次のとおりです。

  1. Qtライブラリをfoo.app/Contents/Frameworks/ディレクトリのアプリバンドルにコピーします
  2. 1つのバイナリ、つまりfoo.app/Contents/MacOS/fooのリンクライブラリを調整します(Info.plistで別のバイナリについて言及している場合でも、アプリバンドルと同じ名前である必要があります)

したがって、アプリバンドルにデプロイする他のすべてのバイナリとライブラリについては、次の手順を実行する必要があります。

  1. macdeployqtを実行して、その有用であるがわずかに不十分な利点を享受してください

    macdeployqt <path_to_your_nascent_app_bundle>/foo.app

  2. 追加のライブラリを手動でインストールします

    cp <original_library_path> foo.app/Contents/Frameworks/<lib_name>

  3. 各バイナリがどのライブラリにリンクしているかを調べます。

    otool -L <binary_file_name>

  4. バイナリの内部ライブラリパスを変更します

    install_name_tool -change <original_library_path> @executable_path/../Frameworks/<lib_name> <binary_file_name>

アプリケーションのこれらの手順を自動化するperlスクリプトを作成しましたが、特定の環境に固有であるため、ここに投稿することはできません。

于 2011-07-14T18:14:53.097 に答える
5

サードパーティのライブラリを手動でデプロイすることに注意する必要はありません。macdeployqt ツールがサードパーティの依存関係を検出できるように、追加のライブラリ検索パスを指定できるようにするパッチを Qt にアップロードしています: https://codereview.qt-project.org/#change,47906

この後、サードパーティ ライブラリの展開のサポートを追加する別のコミットがあります。

于 2013-03-16T08:15:06.893 に答える
1

.app バンドルをチェックして、ライブラリが本当に存在しないかどうかを確認しましたか?

その場合、macdeployqt に本当にバグがあるか、リンクしているライブラリが見つからないだけだと思います。個人的には、macdeployqt が実際に必要なサードパーティ ライブラリをバンドルにコピーするのを見たことがありません。

興味深いのは、macdeployqtが .pro ファイルを直接操作することは決してないということです。生成されたアプリケーション バンドルに対して何らかの処理を行うだけです。ドキュメントをざっと見てみると、このQt 4.7 ドキュメント ページは明らかに私の正しさを証明しています。

注: サード パーティのライブラリをアプリケーション バンドルに含める場合は、バンドルの作成後にライブラリをバンドルに手動でコピーする必要があります。

4.6 のドキュメントにバグがあると思います。私にとって、macdeployqtはバンドルにライブラリ ファイルを配置しませんでした (もちろん、Qt* のものは除きます)。

私は過去にこのようなことに多くの時間を費やしましたが、すべてをバンドルにまとめ、必要に応じてライブラリ名を変更し、自動命名ですべてを .dmg ファイルに入れる単純な小さな (Python) スクリプトを作成することになりました。 .

おそらくあなたが聞きたかったことではないかもしれませんが、うまくいきます。;)

于 2010-11-20T11:40:42.903 に答える