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

时间:2014-09-17 11:55:55

标签: ios objective-c xcode linker dependencies

TL; DR

如何使-ObjC链接器标志针对特定的静态库,而不是 all 我链接的静态库,以避免未使用的目标文件与我的应用程序链接?


太长;读了

因此,您正在开发一个新的iOS应用程序,并添加您自己开发的“objcutil”静态库,其中包含各种有用的Objective-C类(未实现为类别),以执行过去有用的各种事情。到目前为止,这么好,并且只有实用程序库中引用的那些目标文件才与应用程序链接。

然后您决定集成要求您使用-ObjC 其他链接器标志Google Maps SDK,并且实用程序库中的所有突然依赖都无法解析,因为您尚未将Xcode配置为链接到这些库。

好的,我可以轻松地解决缺少的依赖项,但是现在你有不需要的未使用的目标文件和库依赖项,而且你想要比这更整洁。

那么你如何避免OCD过载?

<小时/> 来自ld联机帮助页的一些参考:

  

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


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

1 个答案:

答案 0 :(得分:5)

好的,所以答案是使用-force_load代替-ObjC,因为-force_load更专注。

如果您按照说明操作并将静态框架复制到应用项目目录中,那么该框架将位于项目根目录中,您可以删除 {{ 1}}来自其他链接器标志并将其替换为

-ObjC

enter image description here

没有其他需要改变。

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