11

Mac OS X 10.6 SDKを使用しており、展開ターゲットはMacOS10.5に設定されています。libcryptoにリンクしています(AquaticPrimeにはこれが必要です)が、私のアプリがLeopardで起動しないことがわかりました。エラーは

dyld: Library not loaded: /usr/lib/libcrypto.0.9.8.dylib

次の回避策を試しましたが、どれも機能しません。

  • に直接リンクするlibcrypto.0.9.7.dylib(10.6 SDKは、に直接リンクすることを拒否しlibcrypto.0.9.7.dylibます。
  • 10.5SDKのバージョンをlibcrypto.0.9.7.dylib10.6libディレクトリにコピーし、リンクを試みます(今回はリンクプロセスは成功しましたが、Leopardではアプリは存在しないlibcrypto.0.9.8.dylibファイルを検索しようとするため、起動しません)。
  • Mac OS X 10.5.8インストールからコピーlibcrypto.0.9.7.dylibしてリンクします(リンクは成功しましたが、アプリは引き続き検索しますlibcrypto.0.9.8.dylib)。

このライブラリにリンクして10.6SDKを使用する方法はありますか?

ありがとう。

4

5 に答える 5

22

このスレッドのとおり (スレッドの最初の投稿: http://lists.apple.com/archives/cocoa-dev/2009/Aug/msg01737.html、「Snow Leopard の libcrypto」スレッド リスト: http://lists. apple.com/archives/cocoa-dev/2009/Aug/thrd19.html )、解決策は次のことだと思います:

  1. /Developer/SDKs/MacOSX10.5.sdk/usr/lib/ に移動します。このフォルダーから、「libcrypto.0.9.7.dylib」をプロジェクトのソース フォルダーにコピーします。

  2. コピーしたばかりのファイルの名前を「libmycrypto.dylib」に変更します。

  3. 名前を変更したばかりのファイルをプロジェクトに追加します。プロジェクトから他のリンクされた libcrypto フレームワークを必ず削除してください。

  4. ビルド設定を確認し、「-lcrypto」リンカー フラグを必ず削除してください。(通常は「その他のリンカーフラグ」設定に入れられます。)

これで、プロジェクトをビルドできるようになり、10.5 と 10.6 の両方で動作するようになります。

(libcrypto.0.9.7 は 10.5 と 10.6 の両方で使用できます。コピーしたファイルはヘッダーの単なるスタブですが、プロジェクトに埋め込むのではなく、リンクしているだけです。リンカーはインストール パスを使用しないため、 dylib の実際のファイル名に「libmycrypto.dylib」という名前を付けると、パスの競合がなくなりますが、必要なライブラリにリンクすることはできます。

FWIW、これは Xcode の問題です。/usr/lib/libcrypto.dylib (シンボリック リンク) にリンクして、10.5 と 10.6 の両方で正しいバージョンの libcrypto をターゲットにする必要があります。ただし、何らかの理由で Snow Leopard でビルドする場合、Xcode は常にバージョン 0.9.8 にリンクしているようです。)

于 2010-04-12T08:28:33.330 に答える
1

lib の使用目的によっては、libcrypto を、10.5 と 10.6 の両方で適切に動作する CommonCrypto に置き換えることができる場合があります。libcrypto を MD5 機能にのみ使用していたので、openssl/md5.h を CommonCrypto/CommonDigest.h に、MD5() を CC_MD5() に、libcrypto を CommonCrypto に置き換えたところ、両方の Leopard で動作するようになりました。

于 2010-09-29T18:27:13.643 に答える
1

ターゲット ビルド設定でベース SDK を 10.5 に設定してみてください。

于 2010-04-14T11:20:06.940 に答える
0

Leopard OS X には、ppc アーキテクチャのみを持つ libcrypto と libssl が同梱されています。

アプリのコードを変更する必要のない簡単な解決策は、libcrypto.0.9.dylib、libcrypto.0.9.8.dylib、libssl0.9.dylib、libssl.0.9.8.dylib をバックアップし、libcrypto をコピーすることです。 .0.9.7.dylib および libssl.0.9.7.dylib。

Terminal.app を使用して、アプリケーション フォルダーでこれらの変更を行うことができます。

  cd /usr/lib
  sudo cp libcrypto.0.9.dylib libcrypto.0.9.dylib.old
  sudo cp libssl.0.9.dylib libssl.0.9.dylib.old
  sudo ln -sf libcrypto.0.9.7.dylib libcrypto.0.9.dylib
  sudo ln -sf libssl.0.9.7.dylib libssl.0.9.dylib

最新の openssl バージョンを維持できる代替ソリューションを次に示します。

  1. reactivate the current openssl: port activate openssl@1.0.0c_0 (or whatever)
  2. clean up your old unwanted versions of everything: port uninstall inactive
  3. uninstall badly behaved ports: port uninstall md5sha1sum subversion neon
  4. get them back: port install subversion md5sha1sum
于 2012-05-16T12:45:31.397 に答える
0

特定のバージョンではなく、libcrypto.0.9.dylib または libcrypto.dylib に対してリンクを試みましたか?

于 2010-04-11T22:23:47.300 に答える