iOS 시뮬레이터와 macOS에서 모두 작동하는 범용 라이브러리를 빌드 할 수는 없습니다. iOS/Intel 및 macOS/Intel은 C 런타임 라이브러리 (Libc)보다 ABI 호환되지 않습니다. 이 답변은 iOS 타겟을 위해 autoconf 기반 프로젝트를 크로스 컴파일하는 방법을 보여 주며 결과로 생성되는 정적 아카이브를 함께 쉽게 작성할 수 있습니다.
이 같은 일을 할 것입니다 :
#!/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
난 그냥 함께 해당 스크립트를 던져 버리고는 pixman 위해 (--disable-의 libpng와 건너 뛰는 시험의 추가와 함께) 작동 확인했습니다. libgcrypt 용으로 커스터마이징 할 필요가 있지만, iOS 용 autoconf/automake/glibtool 기반 프로젝트를 빌드하기위한 일반적인 패턴을 보여줍니다.
빌드 후 ~/{DEVICE_ARM {, 64}, SIM_ {i386, x86_64}}의 콘텐츠가 있고 정적 라이브러리를 모두 함께 사용하거나 프로젝트에서 모두 사용할 수 있습니다 (링커 무시할 수있는 "다른"아카이브의 누락 된 조각에 대한 경고를 내 보냅니다).
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
빌드 구성 유형의 뉘앙스에 대해 완전히 익숙하지 않아도 될 수 있습니다. 나는 config.log가 다중 #error Unsupported architecture를 생성하고 있다는 것을 알았다. –
그래, 나는 대답을 훨씬 더 명백하게 업데이트했다. 나는 대본을 썼고 pixman에서 그것을 테스트했다. 다른 autoconf/automake/glibtool 프로젝트를 위해이 파일을 수정해야하지만 일반적인 생각을 갖게됩니다. –