结合静态库
我尝试了这个问题的方法,但似乎ar
的linux版本是不一样的mac版本,因为我没有再次结合的目标文件。
我基本上想要做的是通过运行脚本构build阶段将另一个静态库合并到我的Xcode静态库生成产品。
不幸的是,我不能直接将其他库编译到我的项目中,因为它有自己的编译系统(因此我使用编译的库)。
我认为应该可以通过ar
将其他库合并到Xcode生成的库中,而无需反编译构build产品。 我如何做到这一点?
你可以使用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
来合并图像。
您应该使用ar -r
在MacOS上创build一个存档:
ar -x libabc.a ar -x libxyz.a ar -r libaz.a *.o