我有一个很大的静态库,我想打包成一个 iOS 静态框架以便于使用。该库实际上是几个.a
文件,每个库的逻辑模块一个。
我.a
有为设备(带有armv7
, armv7s
,arm64
的胖文件)和模拟器(带有i386
,的胖文件)构建的编译文件x86_64
。
现在,AFAIK,我需要将所有这些文件合并到一个大文件中,以构建一个合适的框架。
使用此处描述的技术(组合静态库),我可以这样做:
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
显示了所有符号)。
知道如何构建该静态框架吗?