我有一个巨大的静态库,希望将其打包成iOS静态框架以便于使用。实际上这个库是由几个逻辑模块组成的.a
文件。
我已经为设备编译好了.a
文件(fat文件包含armv7
、armv7s
、arm64
),也为模拟器编译好了i386
、x86_64
的fat文件。
现在,据我所知,我需要将所有这些文件合并为一个大文件,以便构建正确的框架。
使用此处描述的技术 (Combine static libraries),我可以做到:
libtool -static -o new.a old1.a old2.a
但是显然old1.a
和old2.a
都包含相同的符号。因此,当链接到我的框架时,我会得到链接器错误(有充分的理由)duplicate symbols
。
更正确的方法是解压缩.o
文件,并将它们组合成一个大的.a
文件(如何将多个库归档文件(.a)打包成一个归档文件?),以避免重复的符号。
ar x old1.a
ar x old2.a
ar rcs new.a *.o
现在,请记住,
old1.a
和old2.a
是庞大的文件,因此我需要按体系结构进行分离。所以这是我所做的事情:
lipo old1.a -thin armv7 -output armv7/old1.a
cd armv7; ar x old1.a; cd ..
...
lipo old1.a -thin x86_64 -output x86_64/old1.a
cd x86_64; ar x old1.a; cd ..
// Same goes for old2.a ...
// Then,
libtool -static -o new.a armv7/*.o armv7s/*.o arm64/*.o // ... etc
但是出于某些原因,当链接到这个创建的框架时,链接器找不到任何符号(即使 nm
显示它们全部存在)。
有没有想法如何构建这个静态框架?