11

我正在使用 Mac OS X 10.6 SDK,并且我的部署目标设置为 Mac OS 10.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.5 SDK 的版本复制libcrypto.0.9.7.dylib到 10.6 lib 目录并尝试链接它(这次链接过程成功,但在 Leopard 中,应用程序仍然尝试查找不存在的libcrypto.0.9.8.dylib文件,因此不会启动)。
  • 从 Mac OS X 10.5.8 安装复制libcrypto.0.9.7.dylib并与之链接(链接成功,但应用程序仍在寻找libcrypto.0.9.8.dylib)。

有没有办法链接到这个库并仍然使用 10.6 SDK?

谢谢。

4

5 回答 5

22

根据此处的此线程(线程中的第一篇文章:http: //lists.apple.com/archives/cocoa-dev/2009/Aug/msg01737.html,“雪豹上的 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

您可以尝试在目标构建设置中将基本 SDK 设置为 10.5。

于 2010-04-14T11:20:06.940 回答
1

根据您使用 lib 的目的,您可以将 libcrypto 替换为 CommonCrypto,它适用于 10.5 和 10.6。我只将 libcrypto 用于 MD5 功能,因此我将 openssl/md5.h 替换为 CommonCrypto/CommonDigest.h,将 MD5() 替换为 CC_MD5(),将 libcrypto 替换为 CommonCrypto,现在它适用于两个 Leopard。

于 2010-09-29T18:27:13.643 回答
0

您是否尝试过链接 libcrypto.0.9.dylib 或 libcrypto.dylib 而不是特定版本?

于 2010-04-11T22:23:47.300 回答
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 在 Applications 文件夹中进行这些更改:

  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 回答