11

OS 10.7 Lion でビルドおよびコンパイルされた Mac プロジェクトで libcurl を使用しています。Other Linker Flags の -lcurl オプションを使用するか、プロジェクトにライブラリを追加することで、動的ライブラリに問題なくリンクできます。すべてが想定どおりに機能します。

アプリケーションが OS 10.6 および 10.5 でも動作することを望みます。それに応じて展開ターゲットを設定しました。OS のこれらのバージョンのいずれかでアプリケーションを実行しようとすると、dyld エラーが発生します。

ライブラリがロードされていません: /usr/lib/libcurl.4.dylib 理由: 互換性のないライブラリ バージョン: X にはバージョン 7.0.0 以降が必要ですが、libcurl.4.dylib はバージョン 6.0.0 を提供します。

Mac OS 10.5 でも同様の問題です。

Mac OS 10.7 の Xcode でシステムの libcurl ライブラリにリンクして、アプリケーションが 10.6 および 10.5 でも実行されるようにするにはどうすればよいですか?

私はいくつかのオプションを見てきました:

  1. 1 つは、次の投稿で提案されているように、ベース SDK を変更することです: Mac OS X libcurl dylib 互換バージョンこれを行うと、アプリケーションは正常に動作します。しかし、これは私にとって選択肢ではありません。10.7 SDK を使用している必要があるため、古いバージョンの SDK に戻すことはできません。

  2. その他のリンカー フラグの -weak_library /usr/lib/libcurl.dylib オプションを使用して、ライブラリに対して弱いリンクを試みました。アプリケーションは起動しますが、libcurl シンボルを参照しようとするとクラッシュします。ただし、Base SDK を変更すると機能するため、互換性のないコードの問題ではないことはわかっています。

  3. dlopen("libcurl.dylib", RTLD_LOCAL|RTLD_LAZY); を使用して、コード内でライブラリを動的にロードしようとしました。ライブラリは読み込まれているようですが、参照するすべてのシンボルを手動でバインドする必要がありますか?

確かにこれを行う方法があるはずです。libcurl ライブラリは Mac OS 10.5、10.6、および 10.7 にインストールされていますが、アプリケーションは古いバージョンの Mac OS で利用可能なライブラリを使用できません。どうすればこれを修正できますか?

4

1 に答える 1

7

いくつかのオプション:

  • libcurl から Mac フレームワーク API (CFNetwork、NSURLConnection など) に切り替えます。
  • システム ライブラリに依存するのではなく、独自のバージョンの libcurl をビルドしてアプリにパッケージ化します。
  • デプロイ ターゲットに対応する SDK からスタブ ライブラリをコピーまたはシンボリック リンクし、明示的なパスを使用してリンクします。
于 2012-04-27T00:26:58.687 に答える