ld:找不到-lz clang的库:错误

时间:2013-06-18 11:13:37

标签: ios objective-c google-maps google-maps-sdk-ios

您好我想在我的项目中使用Google Maps API,并添加了libz.dylib。当我在其他链接器标记中编写-ObjC用于链接Google Maps API时,它运行良好但当我删除此标志时找不到找不到找到错误的-lz库,所以请帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

简答
-ObjC标志留在原处。


长答案
根据iOS的Google Maps SDK docs,需要-ObjC标记。

  

在Other Linker Flags部分中,添加-ObjC。如果看不到这些设置,请将Build Settings栏中的过滤器从Basic更改为All。

如果您想了解更多信息,请参阅Apple technical Q&A QA1490

问题出现在静态库上的类别,默认情况下没有链接

  

Objective-C没有为每个函数(或Objective-C中的方法)定义链接器符号 - 而是仅为每个类生成链接器符号。如果使用类别扩展预先存在的类,则链接器不知道将核心类实现的对象代码与类别实现相关联。这可以防止在生成的应用程序中创建的对象响应类别中定义的选择器。

显然Google Maps API在其静态库中使用类别,因此您需要-ObjC标志来更改链接器行为,如Q& A

中所述。
  

要解决此问题,针对静态库的目标链接必须将-ObjC选项传递给链接器。此标志使链接器加载定义Objective-C类或类别的库中的每个目标文件。虽然此选项通常会导致更大的可执行文件(由于加载到应用程序中的其他对象代码),但它将允许成功创建包含现有类的类别的有效Objective-C静态库。