Ich habe den Ansatz in dieser Frage versucht, aber es scheint die Linux-Version von ar
ist nicht dasselbe wie die Mac-Version, da ich die Objektdateien nicht erneut kombiniert habe.
Was ich im Grunde tun möchte, ist, eine andere statische Bibliothek in mein statisches Xcode-Bibliotheks-Build-Produkt über eine Run-Script-Build-Phase zusammenzuführen.
Leider kann ich die andere Bibliothek nicht direkt in mein Projekt kompilieren, da sie ein eigenes Build-System hat (daher verwende ich die kompilierten Bibliotheken).
Ich denke, es sollte möglich sein, die andere Bibliothek über einzubinden ar
in die von Xcode generierte Bibliothek, ohne das Build-Produkt zu dekompilieren. Wie mache ich das?
Sie können verwenden libtool
es zu tun
libtool -static -o new.a old1.a old2.a
Wenn Sie es mit statischen Bibliotheken mit mehreren Architekturen zu tun haben, ist ein wenig zusätzliche Manipulation erforderlich, um jede Bibliothek auszudünnen, die ausgedünnten Versionen zu kombinieren und dann das Ergebnis zu fetten. Hier ist ein praktisches Skript, das Sie zu Ihrer Zufriedenheit bearbeiten können und das alles in einem erledigt. Das Beispiel nimmt drei iOS-Bibliotheken path/to/source/libs/libone.a
, path/to/source/libs/libtwo.a
und path/to/source/libs/libthree.a
und führt sie in einer einzigen Bibliothek zusammen 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
Sie sollten nur in der Lage sein, einen mit dem anderen zu verknüpfen. Also … einfach benutzen ld
um die Bilder zusammenzuführen.
Du solltest benutzen ar -r
So erstellen Sie ein Archiv unter MacOS:
ar -x libabc.a
ar -x libxyz.a
ar -r libaz.a *.o
14095700cookie-checkKombinieren Sie statische Bibliotheken auf Appleyes