13

我正在构建一个 iOS 静态库(根据https://github.com/jverkoey/iOS-Framework)。我依赖于 SBJson 和 AFNetworking。我想包含这些库以避免版本问题和安装简单;为此,我需要为这些库添加前缀以避免命名冲突。

如何以简单的方式为其他静态库添加前缀?

理想情况下,这将是我构建过程的一部分。不太理想但可以接受的是有关如何以理智的方式重构和重命名的提示。

4

1 回答 1

21

唯一安全的解决方案(除了根本不这样做)是在所有符号上构建任何带有前缀的依赖项。

最简单的前缀方法是经典的“查找和替换”。这很容易出错,因此最好使用 .anm -a并搜索任何非前缀符号的结果。

第二种更安全的方法是使用两遍编译过程。

  • 第一遍构建依赖项目并运行nm以将所有符号转储到头文件中。
  • 第二遍再次构建依赖项目,但这次将生成的前缀头文件导入预编译头文件中。必须在您从框架中的依赖项中引用符号的任何地方使用此前缀标头,以便正确引用重命名的符号。

作为参考,我们将它与Nimbus一起使用来生成 Nimbus 前缀标头: https ://github.com/jverkoey/nimbus/blob/master/scripts/generate_namespace_header

这允许您分发嵌入了 Nimbus 前缀版本的 .framework。

您现在可以将生成的 .a 链接到您的框架中,并且当第三方开发人员不可避免地将他们自己的依赖版本链接到他们的项目时,可以安全地避免任何链接器冲突。

于 2013-10-13T02:54:36.240 回答