Ответ 1
вы можете использовать libtool
для этого
libtool -static -o new.a old1.a old2.a
Я пробовал этот подход в question, но, похоже, версия linux ar
не совпадает с версией mac, так как я не смог объединить объектные файлы снова.
То, что я в основном хочу сделать, это объединить еще одну статическую библиотеку в мой продукт сборки статической библиотеки Xcode через фазу сборки run- script.
К сожалению, я не могу скомпилировать другую библиотеку напрямую в мой проект, потому что у нее есть собственная система сборки (поэтому я использую скомпилированные библиотеки).
Я думаю, что должно быть возможно объединить другую библиотеку через ar
в библиотеку сгенерированной Xcode без декомпиляции продукта сборки. Как это сделать?
вы можете использовать libtool
для этого
libtool -static -o new.a old1.a old2.a
Если вы имеете дело с многокомпонентными статическими библиотеками, требуется немного дополнительной манипуляции для тонкой каждой библиотеки, объединения разбавленных версий и последующей откармливания результата. Здесь удобный script, который вы можете отредактировать к своему удовлетворению, что делает все это в одном. В примере используются три библиотеки 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:
ar -x libabc.a
ar -x libxyz.a
ar -r libaz.a *.o