ios - 在 iOS/iPhone SDK 中控制第三方符号的导出

标签 ios static export symbols

如果您正在构建一个将包含在其他人的代码中的商业 iOS SDK,并且您拥有您拥有许可的第三方库,是否有一种有效的方法来简化库/框架结构,而不是导出那些第三者静态库中的政党符号?

我很感激我可以指示开发人员检查重叠符号,但我想尽量减少说明。即,只希望他们将 lib 放入他们的项目中,然后他们就可以离开了。我也不想导出我的第三方符号,因为它们可能会在以后的项目中发生变化。

最佳答案

不幸的是,这里没有很多事情可以轻松完成。静态库只是一堆粘在一起的 .o 文件。没有链接器步骤来确定 .o 之间实际需要哪些片段。直到最后的链接步骤(由您的客户)才完成。

也就是说,您可以考虑一些事情:

  • 首先,尽可能避免在静态库中包含子库。如果客户可能拥有同一个子库的其他副本,这就非常危险。您的情况似乎有所不同,因为您的子库已获得许可,因此客户不太可能拥有多个副本,但是例如,您永远不应在静态库中包含 libcurl 的静态副本。您必须要求客户自己链接 libcurl,否则事情会对他们造成非常严重的影响。 (请参阅 Linking static libraries, that share another static library。)同样,这听起来可能不适用于您,但如果您有常用的开源库,请记住这一点。

  • 处理可见性的老式解决方案是将编译单元粘合在一起。这是一种奇特的说法,“将所有 .c/.m 文件连接成一个大文件并编译它”。您标记为“静态”的任何函数在该编译单元之外都将不可见,因此不应导出。这也恰好增加了在您的库中进行编译器内联和其他优化(特别是没有花哨的链接时优化)的可能性。

关于ios - 在 iOS/iPhone SDK 中控制第三方符号的导出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11918493/

相关文章:

ios - 搜索栏 IOS 8 - 显示两个搜索栏

ios - Xcode-beta 8.无法创建核心数据

javascript - Flow中不允许直接导出?

linux - 如何在 Linux 中从文件运行 Bash 'export' 命令?

mysql - 如何将单个表从 phpmyadmin 导出到逗号分隔的文本文件?

iphone - 带有 drawRect + 普通蓝色选择的自定义 UITableViewCell

ios - 需要更新 Swift 代码到最新版本

C++共享库导出函数

c++ - 静态分配的内存在静态取消初始化期间会变得无效吗?

properties - 如何从 typescript 中的静态函数访问非静态属性