繁体   English   中英

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

[英]In Xcode, how do I link a dynamic library (libcurl) so that the app also works on older versions of the Mac OS?

我在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上使用可用库。 我怎样才能解决这个问题?

一些选择:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM