Apache 휴대용 런타임을 iPhone으로 크로스 컴파일하십시오
-
05-07-2019 - |
문제
이것은 iPhone의 크로스 컴파일에 대한 이전 질문에 대한 후속 조치입니다.
공식 iPhone SDK 용 Autotools 기반 라이브러리 크로스 컴파일
기본적으로 iPhone의 APR (Apache Portable Runtime) 버전 1.3.8 (최신)을 컴파일하려고합니다. 현재 구성 단계에서 다음 오류가 발생하고 있습니다.
checking for working PROCESS_SHARED locks... configure: error: in `/Users/michaelsafyan/Downloads/apr-1.3.8': configure: error: cannot run test program while cross compiling See `config.log' for more details.
"iPhone3.1-configure-disable-dso-enable-shreads"를 통해 "구성"스크립트를 호출하고 있습니다. 여기서 "iPhone3.1-configure"는 다음과 같은 스크립트입니다. "스크립트 구성 :
#! /bin/bash # # Program : iphone3.1-configure # Authors : Michael Aaron Safyan (michaelsafyan@gmail.com) # Synopsis : # This program runs the "configure" script generated by the # GNU Autotools in order to cross-compile thirdparty libraries # for the iPhone 3.1 SDK. Run this script while in a directory # containing an autotools "configure" script. Once you run this, # you can use "make" and "sudo make install" to build the library. # An install prefix of "/opt/iphone-3.1/" is used. # unset CPATH unset C_INCLUDE_PATH unset CPLUS_INCLUDE_PATH unset OBJC_INCLUDE_PATH unset LIBS unset DYLD_FALLBACK_LIBRARY_PATH unset DYLD_FALLBACK_FRAMEWORK_PATH export BUILD_DARWIN_VER=`uname -r` export SDKVER="3.1" export DEVROOT="/Developer/Platforms/iPhoneOS.platform/Developer" export SDKROOT="$DEVROOT/SDKs/iPhoneOS$SDKVER.sdk" export PKG_CONFIG_PATH=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS$SDKVER.sdk/usr/lib/pkgconfig:/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/pkgconfig:/opt/iphone-$SDKVER/lib/pkgconfig:/usr/local/iphone-$SDKVER/lib/pkgconfig export PREFIX="/opt/iphone-$SDKVER" export AS="$DEVROOT/usr/bin/as" export ASCPP="$DEVROOT/usr/bin/as" export AR="$DEVROOT/usr/bin/ar" export RANLIB="$DEVROOT/usr/bin/ranlib" export CPPFLAGS="-pipe -no-cpp-precomp -I$SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -I$SDKROOT/usr/include -I$DEVROOT/usr/include -I/opt/iphone-$SDKVER/include -I/usr/local/iphone-$SDKVER/include" export CFLAGS="-std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='$SDKROOT' -isystem $SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem $SDKROOT/usr/include -isystem $DEVROOT/usr/include -isystem /opt/iphone-$SDKVER/include -isystem /usr/local/iphone-$SDKVER/include" export CXXFLAGS="-std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='$SDKROOT' -isystem $SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem $SDKROOT/usr/include -isystem $DEVROOT/usr/include -isystem /opt/iphone-$SDKVER/include -isystem /usr/local/iphone-$SDKVER/include" export LDFLAGS="-arch armv6 --sysroot='$SDKROOT' -L$SDKROOT/usr/lib -L$DEVROOT/usr/lib -L/opt/iphone-$SDKVER/lib -L/usr/local/iphone-$SDKVER/lib" export CPP="$DEVROOT/usr/bin/cpp" export CXXCPP="$DEVROOT/usr/bin/cpp" export CC="$DEVROOT/usr/bin/gcc-4.2" export CXX="$DEVROOT/usr/bin/g++-4.2" export LD="$DEVROOT/usr/bin/ld" export STRIP="$DEVROOT/usr/bin/strip" if [ ! \( -d "$DEVROOT" \) ] ; then echo "The iPhone SDK could not be found. Folder \"$DEVROOT\" does not exist." exit 1 fi if [ ! \( -d "$SDKROOT" \) ] ; then echo "The iPhone SDK could not be found. Folder \"$SDKROOT\" does not exist." exit 1 fi ./configure --prefix="$PREFIX" --build="i386-apple-darwin$BUILD_DARWIN_VER" --host="arm-apple-darwin9" --enable-static --disable-shared ac_cv_file__dev_zero=no ac_cv_func_setpgrp_void=yes $@
구성이 제공하는 오류는 "크로스 컴파일 동안 테스트 프로그램을 실행할 수 없음"의 줄을 따라 메시지를 처음 접수 한 것은 아닙니다. 실제로, "ac_cv_file__dev_zero = no"및 "iPhone3.1-configure"스크립트의 "ac_cv_file__dev_zero = no"및 "ac_cv_func_setpgrp_void = 예"요소로 인해 유사하게 실패한 두 가지 테스트가 우회됩니다. 내가 가진 문제는이 점검을 우회하는 방법을 모른다는 것입니다. 즉,이 테스트를 우회하도록 설정해야 할 변수와 대상을 위해 구축 된 실행 파일을 실행하려는 추가 테스트를 모릅니다. 플랫폼. Google에서 해결 방법을 찾을 수 있었기 때문에 이전의 두 가지 유사한 테스트를 우회 할 수있었습니다. 누구나 설정할 변수 또는이 수표를 우회 할 다른 방법을 알고 있습니까?
크로스 컴파일시 실행할 수없는 모든 테스트를 억제하는 방법을 알고 있거나이 특정 점검을 억제하는 방법을 알고 있다면 크게 감사 할 것입니다. 매우 감사합니다.
해결책
다음 변수를 설정해야합니다.
- ac_cv_file__dev_zero = "예"
- ac_cv_func_setpgrp_void = "예"
- apr_cv_process_shared_works = "예"
- apr_cv_mutex_robust_shared = "아니오"
- apr_cv_tcp_nodelay_with_cork = "예"
- ac_cv_sizeof_struct_iovec = "8"
- apr_cv_mutex_recursive = "예"
다음 업데이트 된 "iPhone3.1-Configure"스크립트를 사용하여 프로그램을 구성하십시오.
#! /bin/bash # # Program : iphone3.1-configure # Authors : Michael Aaron Safyan (michaelsafyan@gmail.com) # Synopsis : # This program runs the "configure" script generated by the # GNU Autotools in order to cross-compile thirdparty libraries # for the iPhone 3.1 SDK. Run this script while in a directory # containing an autotools "configure" script. Once you run this, # you can use "make" and "sudo make install" to build the library. # An install prefix of "/opt/iphone-3.1/" is used. # unset CPATH unset C_INCLUDE_PATH unset CPLUS_INCLUDE_PATH unset OBJC_INCLUDE_PATH unset LIBS unset DYLD_FALLBACK_LIBRARY_PATH unset DYLD_FALLBACK_FRAMEWORK_PATH export BUILD_DARWIN_VER=`uname -r` export SDKVER="3.1" export DEVROOT="/Developer/Platforms/iPhoneOS.platform/Developer" export SDKROOT="$DEVROOT/SDKs/iPhoneOS$SDKVER.sdk" export PKG_CONFIG_PATH=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS$SDKVER.sdk/usr/lib/pkgconfig:/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/pkgconfig:/opt/iphone-$SDKVER/lib/pkgconfig:/usr/local/iphone-$SDKVER/lib/pkgconfig export PREFIX="/opt/iphone-$SDKVER" export AS="$DEVROOT/usr/bin/as" export ASCPP="$DEVROOT/usr/bin/as" export AR="$DEVROOT/usr/bin/ar" export RANLIB="$DEVROOT/usr/bin/ranlib" export CPPFLAGS="-pipe -no-cpp-precomp -I$SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -I$SDKROOT/usr/include -I$DEVROOT/usr/include -I/opt/iphone-$SDKVER/include -I/usr/local/iphone-$SDKVER/include" export CFLAGS="-std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='$SDKROOT' -isystem $SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem $SDKROOT/usr/include -isystem $DEVROOT/usr/include -isystem /opt/iphone-$SDKVER/include -isystem /usr/local/iphone-$SDKVER/include" export CXXFLAGS="-std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='$SDKROOT' -isystem $SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem $SDKROOT/usr/include -isystem $DEVROOT/usr/include -isystem /opt/iphone-$SDKVER/include -isystem /usr/local/iphone-$SDKVER/include" export LDFLAGS="-arch armv6 --sysroot='$SDKROOT' -L$SDKROOT/usr/lib -L$DEVROOT/usr/lib -L/opt/iphone-$SDKVER/lib -L/usr/local/iphone-$SDKVER/lib" export CPP="$DEVROOT/usr/bin/cpp" export CXXCPP="$DEVROOT/usr/bin/cpp" export CC="$DEVROOT/usr/bin/gcc-4.2" export CXX="$DEVROOT/usr/bin/g++-4.2" export LD="$DEVROOT/usr/bin/ld" export STRIP="$DEVROOT/usr/bin/strip" if [ ! \( -d "$DEVROOT" \) ] ; then echo "The iPhone SDK could not be found. Folder \"$DEVROOT\" does not exist." exit 1 fi if [ ! \( -d "$SDKROOT" \) ] ; then echo "The iPhone SDK could not be found. Folder \"$SDKROOT\" does not exist." exit 1 fi ./configure \ --prefix="$PREFIX" \ --build="i386-apple-darwin$BUILD_DARWIN_VER" \ --host="arm-apple-darwin9" \ --enable-static \ --disable-shared \ ac_cv_file__dev_zero="yes" \ ac_cv_func_setpgrp_void="yes" \ apr_cv_process_shared_works="yes" \ apr_cv_mutex_robust_shared="no" \ apr_cv_tcp_nodelay_with_cork="yes" \ ac_cv_sizeof_struct_iovec="8" \ apr_cv_mutex_recursive="yes" $@
"iPhone3.1-configure-disable-dso-enable-shreads && make"를 사용하여 "sudo make install"을 사용하십시오.