我在 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 上运行?
我看过几个选项:
一种是更改 Base SDK,如这篇文章中所建议的那样: Mac OS X libcurl dylib 兼容版本如果我这样做,则应用程序可以正常工作。但这不是我的选择。我必须使用 10.7 SDK,因此不能接受回退到旧版本的 SDK。
我已经尝试使用其他链接器标志中的 -weak_library /usr/lib/libcurl.dylib 选项对库进行弱链接。应用程序启动但当我尝试引用 libcurl 符号时崩溃。但是,我知道不兼容的代码不是问题,因为当我更改 Base SDK 时它可以工作。
我尝试使用 dlopen("libcurl.dylib", RTLD_LOCAL|RTLD_LAZY); 在代码中动态加载库 该库似乎已加载,但我必须手动绑定我引用的所有符号?
肯定有办法做到这一点。libcurl 库安装在 Mac OS 10.5、10.6 和 10.7 上,但应用程序无法在旧版本的 Mac OS 上使用可用的库。我怎样才能解决这个问题?