在Xcode中,我怎么链接一个动态库(libcurl中),从而使应用程序也适用于旧版本的Mac OS

2019-09-16 19:33发布

我使用内置和OS 10.7狮子编译在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类似的问题。

我怎么能反对在Xcode系统的libcurl库为在Mac OS 10.7链接,这样的应用程序也将在10.6和10.5运行?

我已经看了几个选项:

  1. 一是要更改基本的SDK,因为在这篇文章建议: Mac OS X中的libcurl dylib兼容版本如果我这样做,应用程序工作正常。 但是,这不是我的选择。 我必须使用10.7 SDK,所以回归到旧版本的SDK是不能接受的。

  2. 我试着使用其它链接器标记的-weak_library /usr/lib/libcurl.dylib选项对库弱链接。 当我尝试引用的libcurl符号的应用程序将启动,但随后崩溃。 但是,我知道,因为当我更改基础SDK可它不是用不兼容的代码有问题。

  3. 我已经使用dlopen(“libcurl.dylib”,RTLD_LOCAL | RTLD_LAZY)试图动态加载内代码库; 该库似乎加载,但我必须手动绑定所有我引用的符号?

当然必须有办法做到这一点。 libcurl库安装在Mac OS 10.5,10.6,和10.7,但应用程序无法使用可用库在旧版本的Mac OS。 我怎样才能解决这个问题?

Answer 1:

一些选项:

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


文章来源: In Xcode, how do I link a dynamic library (libcurl) so that the app also works on older versions of the Mac OS?