之前已经问过这个问题,但是深入研究了各种开发工具的文档 是 可能,只是不明显。
动机:
制作一个供其他iOS开发人员使用的静态库。如果导出库中的某些符号会导致问题,所以我希望将它们作为仅内部符号。使用动态库,这很容易,只需使用 -exported_symbols_list
libtool
(ld
参数并列出你想要公开的那些。 libtool
文档不允许这个参数用于静态库。
Library有几个ObjectiveC .m文件,它们使用彼此的代码。只需要将组中的一个类公开给最终的.a静态库文件的用户。
试着 libtool -exported_symbols_list publicsymbols.exp
但那种说法 libtool
不支持 -static
对于静态库。
无法使符号与属性一起使用(如果它甚至可以工作),因为组中的其他.m文件需要这些符号。
好像 ld
可以获取几个.o文件并将它们链接到一个新的.o文件中(通过 -r
论证)它没有“动态唯一”的免责声明 -exported_symbols_list
论证(可能只是不清楚文档......)。
就像测试我用Xcode构建我的项目所以我制作了所有.o文件,然后尝试调用 ld
在命令行上,如下所示:
ld -r -x -all_load -static -arch armv6 -syslibroot {path}
-filelist /Users/Dad/ABCsdk/iphone-ABClib/build/ABCLib.build/Distribution-iphoneos/ABCLib-device.build/Objects-normal/armv6/ABCsdk.LinkFileList
-exported_symbols_list {exp file path} -o outputfile.o
其中{path}类型的东西有很长的路径到那里的适当位置。
但我得到如下错误:
/ usr / bin / ld_classic:/Users/Dad/ABCsdk/iphone-ABClib/build/ABCLib.build/Distribution-iphoneos/ABCLib-device.build/Objects-normal/armv6/ABCmain.o不兼容,文件包含不受支持的类型第3节(_文本,_picsymbolstub4)在加载命令0中(必须指定要使用的“-dynamic”)
那里似乎有些不对劲......
有谁知道一个聪明的方法来使这项工作?谢谢。