结合静态库

时间:2011-11-17 16:12:45

标签: objective-c c xcode static-libraries

我尝试了question中的方法,但似乎ar的linux版本与mac版本不同,因为我无法再次组合目标文件。

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

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

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

4 个答案:

答案 0 :(得分:68)

您可以使用libtool来执行此操作

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

答案 1 :(得分:5)

如果您正在处理多架构静态库,则需要进行一些额外的操作来细化每个库,组合稀疏版本,然后增加结果。这是一个方便的脚本,您可以编辑到令您满意的功能,它可以完成所有功能。该示例需要三个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

答案 2 :(得分:0)

您应该使用ar -r在MacOS上创建存档:

ar -x libabc.a
ar -x libxyz.a
ar -r libaz.a  *.o

答案 3 :(得分:-1)

你应该能够将一个链接到另一个。所以...只需使用ld合并图像。