我正在构建一个iOS静态库供第三方使用。它是使用包含大量C ++的其他几个静态库构建的,从而产生了一个巨大的可交付库。
iOS库的API非常简单,我知道它不会运用所有包含的代码。我想从各种库中删除不需要的模块,这样我就可以减小最终的大小。
我有一个使用所有库API的示例应用程序,当它链接时,库中的大多数符号都被丢弃。有没有办法获得这些符号的列表?
答案 0 :(得分:0)
这个答案似乎表明你想要做的事情在GCC 3.x和4.x中是不可能的:
答案 1 :(得分:0)
我被告知使用动态库的限制是由代码签名过程强制执行的,所以我认为这可能有用:
nm -uj
列出可执行文件中的未定义符号。由于库已静态链接,因此唯一未定义的符号应该是标准iOS库定义的符号nm -uj
。未定义的符号是步骤2中列出的符号与可执行文件diff
第2步和第5步中的列表。这将只为您提供图书馆中的符号列表nm -js __TEXT __text
以获取每个目标文件导出的函数列表这可以自动化,可能需要改进以考虑除功能之外的符号(例如全局变量)。