可以将-ObjC标志select性地应用于静态库吗?

TL; DR

我怎样才能使-ObjC链接器标志目标特定的静态库,而不是所有的静态库我链接,以避免未使用的目标文件被链接到我的应用程序?


太长; 阅读

所以你正在开发一个新的iOS应用程序,并且添加了你自己制作的“objcutil”静态库,它包含了各种有用的Objective-C类(没有被实现为类)来完成过去有用的各种事情。 到目前为止,这么好,只有实用程序库中引用的对象文件正在与应用程序链接。

然后,您决定集成Google Maps SDK ,希望您使用-ObjC Other Linker Flags,并且实用程序库中的所有突然依赖项都无法parsing,因为您尚未将Xcodeconfiguration为链接到这些库。

好的,我可以很容易地解决缺less的依赖关系,但是现在您已经有了不需要的不需要的对象文件和库依赖关系,而且您想要比这更有点整齐。

那么如何避免OCD超负荷?


ld页的一些参考:

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


  • Xcode版本:5.1.1
  • OSX版本:10.9.4

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

因此,如果您按照说明将静态框架复制到应用程序项目目录中,那么WRT到Google Maps SDK,那么该框架将位于项目根目录中,您可以从其他链接程序标志中 删除 -ObjC ,并将其replace为

-force_load GoogleMaps.framework/Versions/Current/GoogleMaps

在这里输入图像说明

没有别的需要改变。

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

Interesting Posts