Objective c 在Apple上组合静态库

Objective c 在Apple上组合静态库,objective-c,c,xcode,static-libraries,Objective C,C,Xcode,Static Libraries,我尝试了这种方法,但似乎linux版本的ar与mac版本不一样,因为我没有再次组合目标文件 我主要想做的是通过运行脚本构建阶段将另一个静态库合并到我的Xcode静态库构建产品中 不幸的是,我不能将另一个库直接编译到我的项目中,因为它有自己的构建系统(因此我使用已编译的libs) 我认为应该可以通过ar将另一个库合并到Xcode生成的库中,而无需反编译构建产品。如何实现这一点?您应该能够将一个链接到另一个。所以只需使用ld合并图像。您应该使用ar-r在MacOS上创建存档: ar -x libab

我尝试了这种方法,但似乎linux版本的
ar
与mac版本不一样,因为我没有再次组合目标文件

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

不幸的是,我不能将另一个库直接编译到我的项目中,因为它有自己的构建系统(因此我使用已编译的libs)


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

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

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

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

您可以使用
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/libtwoo.a
为例,将它们合并到一个库
libcombled.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

这实际上是一个比ar更好的解决方案。谢谢任何命令行(bash),只要有开发人员的扩展,就应该在路径中有libtool。或者,作为xcode中的后期构建步骤。您需要下载并安装
libtool
。这在Xcode的命令行工具中。@MohamMad我已将此调用添加为构建阶段脚本。更多的细节正是我所需要的。将其添加为XCode中的运行脚本构建步骤,效果非常好。谢谢,这根本没用。您将覆盖具有相同.o名称的文件。