2

以下は私のシナリオです、

  1. 私のアプリケーションでは、libopus ライブラリを使用する必要がありました。ダウンロードしてインストールし、コンパイルします --> インストール手順は、他のオープン ソース ライブラリと同様に正常です。

  2. libopus.a を自分のアプリケーションにリンクしました。私のやり方は、デフォルトでは /usr/local/lib にインストールされるので、そこからドラッグしてアプリケーションに追加します。

私のマシンでは問題なく動作し、エラーはありませんでした。

別のマシンでは、このライブラリを静的に含めたのでスムーズに実行されることを期待していましたが、次のようにスローエラーが発生しました

dyld: Library not loaded: /usr/local/lib/libopus.0.dylib

だから私は、libopus.aがどういうわけかlibopus.0.dylibも動的に含むと結論付けました、

ビルド設定にコピー フェーズを追加できないため、../Framework フォルダーにコピーされます。

otool -L libpus.a を実行すると、次の結果が表示されます

otool -L /usr/local/lib/libopus.a
Archive : /usr/local/lib/libopus.a
/usr/local/lib/libopus.a(bands.o):
/usr/local/lib/libopus.a(celt.o):
/usr/local/lib/libopus.a(cwrs.o):
/usr/local/lib/libopus.a(entcode.o):
/usr/local/lib/libopus.a(entdec.o):
/usr/local/lib/libopus.a(entenc.o):
/usr/local/lib/libopus.a(repacketizer.o):

dylibライブラリに依存しているため表示されません 今、私の質問は、
アプリケーションに最初にこのパスを調べるように指示する方法です

次のオプションを試しましたが、

  1. install_name_tool ですが、他のマシンでも動作するようです。したがって、ユーザーはこのスクリプトを実行する必要があります。開発者ではありません。

  2. xcodeでいくつかのオプションを設定して、RUNTIME Searchパスを設定してその特定のdylibを見つけようとしていますが、これまでのところ成功していません

4

1 に答える 1

1

install_name_toolユーザーではなく、ビルド プロセス中に開発者によって実行されます。

ライブラリを構築している場合はlibtool(1)、オプションで使用する必要があります-install_name @rpath。それ以外の場合は、 with を使用install_name_tool(1)-id @rpathて で同じことを行うことができますdylib。次に、アプリケーションをビルドするときに、「Runpath search paths」をライブラリをインストールするパスに設定します。

Apple のMach-O Programming TopicsおよびDynamic Library Programming Topicsには、これに関する優れたドキュメントがあります。

于 2013-03-27T13:10:03.580 に答える