Należy pamiętać, że nie można zbudować uniwersalnej biblioteki, która będzie działać zarówno w Symulatorach iOS, jak iw systemie MacOS. iOS/Intel i macOS/Intel nie są kompatybilne z ABI nad biblioteką wykonawczą C (Libc). Ta odpowiedź służy do pokazania, w jaki sposób przekompilować projekty oparte na autoconfach dla celów systemu iOS, a następnie można łatwo połączyć powstałe statyczne archiwa.
Będziemy chcieli zrobić coś takiego:
#!/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
Właśnie rzucił ten scenariusz razem i zweryfikowała to działa (z dodatkiem testów --disable-libpng i pomijanie) dla pixman. Prawdopodobnie będziesz musiał dostosować go do libgcrypt, ale pokazuje ogólny wzór budowania projektów opartych na autoconf/automake/glibtool na iOS.
Po zbudowaniu, będziesz mieć zawartość ~/{DEVICE_ARM {, 64}, SIM_ {i386, x86_64}} i możesz albo połączyć biblioteki statyczne albo po prostu użyć ich wszystkich w swoim projekcie (linker wyśle ostrzeżenia o brakujących plasterkach dla "innych" archiwów, które możesz zignorować).
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
Czy możesz być jednoznaczny, ponieważ nie jestem całkowicie zaznajomiony z niuansami typów konfiguracji. Zauważyłem, że config.log tworzy wiele architektury #error Unsupported. –
OK, zaktualizowałem odpowiedź, by była jeszcze bardziej wyraźna. Napisałem skrypt i przetestowałem go na pixmanie. Będziesz musiał dostosować go do innych projektów autoconf/automake/glibtool, ale masz ogólny pomysł. –