组合静态库
我在这个问题中尝试了这种方法,但似乎ar
的linux版本与mac版本不一样,因为我没有再次合并目标文件。
我基本上想要做的是通过运行脚本构建阶段将另一个静态库合并到我的Xcode静态库生成产品中。
不幸的是,我不能将其他库直接编译到我的项目中,因为它有自己的编译系统(因此我使用编译的库)。
我认为应该可以通过ar
将其他库合并到Xcode生成的库中,而无需反编译构建产品。 我该如何做到这一点?
你可以使用libtool
来做到这一点
libtool -static -o new.a old1.a old2.a
如果您正在处理多架构静态库,那么需要一些额外的操作来精简每个库,合并精简版本,然后增加结果。 这里有一个方便的脚本,您可以编辑它来满足您的需求,并且可以一次完成所有功能。 该示例使用三个iOS库path/to/source/libs/libone.a
, path/to/source/libs/libtwo.a
和path/to/source/libs/libthree.a
,并将它们合并到单个库libcombined.a
。
#! /bin/bash
INPATH="path/to/source/libs"
LIBPREFIX="lib"
LIBS="one two three"
LIBEXT=".a"
OUT="combined"
ARCHS="armv7 armv7s arm64"
for arch in $ARCHS
do
for lib in $LIBS
do
lipo -extract $arch $INPATH/$LIBPREFIX$lib$LIBEXT -o $LIBPREFIX$lib-$arch$LIBEXT
done
INLIBS=`eval echo $LIBPREFIX{${LIBS// /,}}-$arch$LIBEXT`
libtool -static -o $LIBPREFIX$OUT-$arch$LIBEXT $INLIBS
rm $INLIBS
done
OUTLIBS=`eval echo $LIBPREFIX$OUT-{${ARCHS// /,}}$LIBEXT`
lipo -create $OUTLIBS -o $LIBPREFIX$OUT$LIBEXT
rm $OUTLIBS
你应该能够将一个链接到另一个链接。 所以...只需使用ld
来合并图像。