11

我在 OS 10.7 Lion 上构建和编译的 Mac 项目中使用 libcurl。我可以很好地链接到动态库,使用其他链接器标志中的 -lcurl 选项或将库添加到我的项目中。一切都按预期进行。

我希望该应用程序也可以在 OS 10.6 和 10.5 上运行。我相应地设置了部署目标。当我在其中一个操作系统版本中运行应用程序时,我收到一个 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. 一种是更改 Base 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 回答