在Xcode中,如何链接动态库(libcurl),以便该应用程序也适用于旧版本的Mac OS?

Phi*_*lip 11 macos xcode objective-c dylib libcurl

我在OS 10.7 Lion上构建和编译的Mac项目中使用libcurl.我可以使用其他链接器标志中的-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. 一个是更改Base SDK,如本文所述: Mac OS X libcurl dylib兼容版本如果我这样做,应用程序工作正常.但这对我来说不是一个选择.我必须使用10.7 SDK,因此不能接受回归到旧版本的SDK.

  2. 我尝试使用Other Linker Flags中的-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上使用可用库.我怎样才能解决这个问题?

Ken*_*ses 7

一些选择:

  • 从libcurl切换到Mac框架API(CFNetwork,NSURLConnection等)
  • 使用您的应用程序构建和打包您自己的libcurl版本,而不是依赖于系统库.
  • 从与您的部署目标对应的SDK复制或符号链接存根库,并使用显式路径链接到该存根库.