结合静态库

我尝试了这个问题的方法,但似乎ar的linux版本是不一样的mac版本,因为我没有再次结合的目标文件。

我基本上想要做的是通过运行脚本构build阶段将另一个静态库合并到我的Xcode静态库生成产品。

不幸的是,我不能直接将其他库编译到我的项目中,因为它有自己的编译系统(因此我使用编译的库)。

我认为应该可以通过ar将其他库合并到Xcode生成的库中,而无需反编译构build产品。 我如何做到这一点?

你可以使用libtool来做到这一点

 libtool -static -o new.a old1.a old2.a 

如果您正在处理多架构静态库,则需要进行一些额外的操作来精简每个库,合并精简版本,然后增加结果。 这里有一个方便的脚本,你可以编辑你的满意,这一切都在一个。 该示例使用三个iOS库path/to/source/libs/libone.apath/to/source/libs/libtwo.apath/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