-ObjC标志可以有选择地应用于静态库吗?

8

TL;DR

-ObjC链接器标志如何针对特定的静态库而不是我链接的所有静态库,以避免将未使用的对象文件与我的应用程序链接在一起?


太长了;没读

所以你正在开发一个新的iOS应用程序,并添加了自己编写的“objcutil”静态库,其中包含多种有用的Objective-C类(而不是实现为类别)来执行过去有用的各种任务。 到目前为止,只有与实用程序库中引用的对象文件相关的内容才会与该应用程序链接。

然后,您决定集成Google Maps SDK,它要求您使用-ObjC其他链接器标志,突然间,实用库中的依赖项无法解决,因为您尚未配置Xcode链接到这些库。

好的,我可以轻松解决缺少的依赖关系,但是现在您有了未使用的对象文件和库依赖项,您不需要这些文件,您希望变得更加整洁。

所以,您如何避免OCD超载?


来自ld手册的一些参考:

-ObjC加载定义Objective C类或类别的静态存档库的所有成员。此选项不适用于动态共享库。


  • Xcode版本:5.1.1
  • OSX版本:10.9.4
1个回答

5

好的,答案是使用-force_load而不是-ObjC,因为-force_load更加专注。

关于Google Maps SDK,如果您按照说明将静态框架复制到应用程序项目目录中,则框架将位于项目根目录中,您可以从其他链接器标志删除-ObjC并替换为

-force_load GoogleMaps.framework/Versions/Current/GoogleMaps

enter image description here

没有其他需要更改的地方。

对于其他库,您需要使用完整的静态库路径作为-force_load的参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接