28

Xcode でいくつかのコマンドライン ユーティリティを作成しています (プレーン C、Cocoa なし)。私はそれらすべてにカスタマイズしたバージョンの libpng を使用してもらいたいです。また、すべての実行可能ファイル間でライブラリの 1 つのコピーを共有することでスペースを節約したいと考えています (再配布.dylibしてもかまいません)。

libpng エクスポート シンボルを取得するために魔法をかける必要がありますか?

「Link Binary With Libraries」はフェーズリンクを静的に構築しますか?

Apple のドキュメントでは、実行時のライブラリのロードdlopenについて .


私はそれを理解したと思います:

  • 32/64 ビットの実行可能ファイルと 32 ビットのライブラリをビルドしたため、libpng が正しくリンクされませんでした。ライブラリと実行可能ファイルのビルド設定は一致する必要があります。

  • libpng の config.h には、次のような大量の定義が必要です。#define FEATURE_XXX_SUPPORTED

  • "Link Binary With Libraries"ビルド フェーズは動的ライブラリを適切に処理し、アプリケーション バンドルからDYLD_FALLBACK_LIBRARY_PATHをロードするには環境変数が必要です。.dylib

4

4 に答える 4

7

おそらく、ビルドする動的ライブラリに、ライブラリからエクスポートする必要があるものをリストしたエクスポート シンボル ファイルがあることを確認する必要があります。これは、1 行に 1 つずつ、エクスポートするシンボルの単純なリストです。

また、動的ライブラリがビルドされると、その中に組み込まれたインストール名が取得されます。これは、デフォルトでは、ビルドされたパスです。その後、それに対してリンクするものはすべて、最初に指定されたパスでそれを探し、その後でのみDYLD_FALLBACK_LIBRARY_PATHdyld(1)man ページの で説明されている (小さな) デフォルト パスのセットを検索します。

このライブラリを実行可能ファイルの隣に配置する場合は、それを参照するようにインストール名を調整する必要があります。「インストール名」をGoogleで検索するだけで、それに関する大量の情報が得られるはずです。

于 2008-10-12T03:00:34.077 に答える
7

残念ながら、私の経験では、Apple のドキュメントは時代遅れで冗長であり、通常は必要となる多くの一般的な情報が欠落しています。

大学で開発したクロスプラットフォーム ゲームで動作するように FMOD (Sound API) を取得しなければならなかった Web サイトで、これについて多くのことを書きました。これは奇妙なプロセスであり、Apple が開発者向けドキュメントにこれ以上の情報を追加していないことに驚いています。

残念なことに、Microsoft と同じように「悪」であるにもかかわらず、彼らは実際にはドキュメントを作成して開発者の世話をするというより優れた仕事をしています (これは Apple エバンジェリストからのものです)。

基本的に、あなたがしていないのは、.app バンドルをコンパイルした後であると思います。次に、実行可能バイナリ /MyApp.app/contents/MacOS/MyApp でコマンドを実行して、実行可能ファイルがライブラリ ファイルを探す場所を変更する必要があります。スクリプトを実行できる新しいビルド フェーズを作成する必要があります。このプロセスについては再度説明しません。すでにここで詳しく説明しています。

http://brockwoolf.com/blog/how-to-use-dynamic-libraries-in-xcode-31-using-fmod

お役に立てれば。

于 2008-11-23T01:33:34.513 に答える
4

Appleリファレンスページのダイナミックライブラリプログラミングトピックを知っていますか?それはあなたが必要とするもののほとんどをカバーするはずです。プログラムの起動時に無条件にロードされる共有ライブラリと、オンデマンドでロードされる動的にロードされるライブラリ(バンドル、IIRC)があり、MacOSXではLinuxまたはSolarisの同等のライブラリとは多少異なることに注意してください。

于 2008-10-12T02:21:24.720 に答える