结合静态库

Eri*_*ner 41 c xcode objective-c static-libraries

我在这个问题上尝试了这种方法,但似乎linux版本ar与mac版本不同,因为我无法再次组合目标文件.

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

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

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

Bru*_*uce 75

你可以libtool用来做

libtool -static -o new.a old1.a old2.a
Run Code Online (Sandbox Code Playgroud)

  • 这实际上是比'ar`更好的解决方案.谢谢! (2认同)

ble*_*ter 5

如果要处理多体系结构静态库,则需要一些额外的操作来精简每个库,组合精简的版本,然后增加结果。这是一个方便的脚本,您可以对其进行编辑以满意的方式完成所有这些工作。这个例子有三个iOS的图书馆path/to/source/libs/libone.apath/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
Run Code Online (Sandbox Code Playgroud)