Beachten Sie, dass es nicht möglich ist, eine universelle Bibliothek zu erstellen, die sowohl für iOS Simulator als auch für Mac OS funktioniert. iOS/Intel und macOS/Intel sind nicht über die C-Laufzeitbibliothek (Libc) ABI-kompatibel. Diese Antwort dient dazu, Ihnen zu zeigen, wie Sie autoconf-basierte Projekte für iOS-Ziele kompilieren können, und Sie können die resultierenden statischen Archive einfach zusammen kopieren.
Sie wollen, so etwas tun:
#!/bin/bash -e -x
OPT_FLAGS="-Os -g3"
MAKE_JOBS=16
dobuild() {
export CC="$(xcrun -find -sdk ${SDK} cc)"
export CXX="$(xcrun -find -sdk ${SDK} cxx)"
export CPP="$(xcrun -find -sdk ${SDK} cpp)"
export CFLAGS="${HOST_FLAGS} ${OPT_FLAGS}"
export CXXFLAGS="${HOST_FLAGS} ${OPT_FLAGS}"
export LDFLAGS="${HOST_FLAGS}"
./configure --host=${CHOST} --prefix=${PREFIX} --enable-static --disable-shared
make clean
make -j${MAKE_JOBS}
make install
}
SDK="iphoneos"
ARCH_FLAGS="-arch armv7"
HOST_FLAGS="${ARCH_FLAGS} -miphoneos-version-min=8.0 -isysroot $(xcrun -sdk ${SDK} --show-sdk-path)"
CHOST="arm-apple-darwin"
PREFIX="${HOME}/DEVICE_ARM"
dobuild
SDK="iphoneos"
ARCH_FLAGS="-arch arm64"
HOST_FLAGS="${ARCH_FLAGS} -miphoneos-version-min=8.0 -isysroot $(xcrun -sdk ${SDK} --show-sdk-path)"
CHOST="arm-apple-darwin"
PREFIX="${HOME}/DEVICE_ARM64"
dobuild
SDK="iphonesimulator"
ARCH_FLAGS="-arch i386"
HOST_FLAGS="${ARCH_FLAGS} -mios-simulator-version-min=8.0 -isysroot $(xcrun -sdk ${SDK} --show-sdk-path)"
CHOST="i386-apple-darwin"
PREFIX="${HOME}/SIM_i386"
dobuild
SDK="iphonesimulator"
ARCH_FLAGS="-arch x86_64"
HOST_FLAGS="${ARCH_FLAGS} -mios-simulator-version-min=8.0 -isysroot $(xcrun -sdk ${SDK} --show-sdk-path)"
CHOST="x86_64-apple-darwin"
PREFIX="${HOME}/SIM_x86_64"
dobuild
Ich warf nur das Skript zusammen und überprüft es funktioniert (mit dem Zusatz von --disable-libpng und das Überspringen Tests) für die pixman. Sie müssen wahrscheinlich für libgcrypt anpassen, aber es dient dazu, das allgemeine Muster zum Erstellen von autoconf/automake/glibtool-basierten Projekten für iOS zu zeigen.
Nach dem Erstellen, haben Sie Inhalt in ~/{DEVICE_ARM {, 64}, SIM_ {i386, x86_64}} und Sie können entweder die statischen Bibliotheken zusammen lipo oder einfach alle in Ihrem Projekt (Linker) verwenden wird Warnungen über fehlende Slices für die "anderen" Archive ausgeben, die Sie ignorieren können.
Können Sie explizit sein, da ich mit der Nuance von Build-Typen nicht vertraut bin. Ich habe bemerkt, dass config.log mehrere #Unterstützte Architektur erzeugt. –
Ok, ich habe die Antwort aktualisiert, um noch expliziter zu sein. Ich habe ein Skript geschrieben und es auf Pixman getestet. Sie müssen es für andere autoconf/automake/glibtool Projekte anpassen, aber Sie erhalten die allgemeine Idee. –