Si noti che non è possibile creare una libreria universale che funzioni sia per iOS Simulator che per macOS. iOS/Intel e macOS/Intel non sono compatibili ABI sopra la libreria di runtime C (Libc). Questa risposta serve a mostrare come crosscompile i progetti basati su autoconf per i target iOS e puoi facilmente collegare gli archivi statici risultanti.
Hai voglia di fare qualcosa di simile:
#!/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
ho appena buttato quel copione insieme e verificato che funziona (con l'aggiunta di test --disable-libpng e saltare) per pixman. Probabilmente dovrai personalizzarlo per libgcrypt, ma serve per mostrare il modello generale per la creazione di progetti basati su autoconf/automake/glibtool per iOS.
Dopo la creazione, avrete contenuti in ~/{DEVICE_ARM {, 64}, SIM_ {i386, x86_64}} e potete o lipo le librerie statiche insieme o semplicemente usarle tutte nel progetto (il linker emetterà avvisi sulle fette mancanti per gli "altri" archivi che è possibile ignorare).
lipo -create -output lib.a DEVICE_ARM/lib/lib.a DEVICE_ARM64/lib/lib.a SIM_i386/lib/lib.a SIM_x86_64/lib/lib.a
fonte
2014-11-08 00:56:26
Puoi essere esplicito dal momento che sono completamente estraneo alle sfumature dei tipi di configurazione di build. Ho notato che config.log sta producendo più #error Architettura non supportata. –
Ok, ho aggiornato la risposta per essere ancora più esplicita. Ho scritto una sceneggiatura e l'ho provata su pixman. Dovrai adattarlo per altri progetti autoconf/automake/glibtool, ma ottieni l'idea generale. –