【发布时间】:2016-04-19 20:45:08
【问题描述】:
我正在使用一些第三方 iOS 静态库,但在保持较小的二进制文件大小时遇到了一些问题。我使用的库有一个由本机 C/C++ 代码支持的 Objective-C 接口。问题是库中的所有符号(使用 nm 检查)在链接时都包含在我的应用程序中(即使我没有引用库中的任何代码)。这与我对静态库的理解相反,静态库仅将您的应用程序(或其他链接库)引用的代码拉入您的应用程序。
我已经完成了一堆reading 并发现由于Objective-C 的动态特性,链接目标文件或仅包含Objective-C 类别方法的静态库可能会出现特定问题。因此,您可以将 -ObjC 标志传递给链接器,以让链接器拉入所有包含 Objective-C 类或类别的目标文件。这确保了所有类和类别都在运行时定义,但会使用未使用的 Objective-C 类/类别/方法定义使您的应用程序的二进制文件膨胀。
奇怪的是,我看到了添加 -ObjC 链接器标志而不在我的构建中的任何地方使用它的效果。所有的 Objective-C 符号都被包括在内,因此,Objective-C 代码引用的所有本机 C/C++ 符号,无论我的应用程序是否引用库中的任何代码。有没有其他人遇到过这个问题或找到了解决方案?
OS X 10.11.4 和 Xcode 7.3。
【问题讨论】:
标签: ios objective-c xcode macos