IOS рдФрд░ Android рдХреЗ рд▓рд┐рдП рд╕реЗрд▓реНрдл рдмрд┐рд▓реНрдб cURL

рд╢реБрдн рджреЛрдкрд╣рд░
рдореИрдВ iOS / Android рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ CURL рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рддрдХ, рд╣рдордиреЗ рд░реЗрдбреА-рдореЗрдб рд▓рд┐рдмрдХрд░реНрд▓ рдмрд┐рд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛:

рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдВрд╕реНрдХрд░рдг рдЕрд▓рдЧ рдереЗ, рд▓реЗрдХрд┐рди рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рд╕рдорд╛рди рдереАрдВред
рдЖрджреЗрд╢ рдХреЛ рдмрд╣рд╛рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдЗрдХрдЯреНрдард╛ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред


рдореЛрдмрд╛рдЗрд▓ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ:

рдЖрдИрдУрдПрд╕ рдХрд╛ рдирд┐рд░реНрдорд╛рдг

CURL рдбрд╛рдЙрдирд▓реЛрдб рдкреГрд╖реНрда рдореЗрдВ iOS рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд▓рд┐рдВрдХ рд╣реИред
рдЗрд╕рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддреЗ рд╣реБрдП, рд╣рдо рдЦреБрдж рдХреЛ рдПрдХ рдРрд╕реЗ рдкреГрд╖реНрда рдкрд░ рдкрд╛рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдБ рд▓реЗрдЦрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ рдХрд┐ iOS рдХреЗ рд▓рд┐рдП cURL рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
IOS рдХреЗ рд▓рд┐рдП рдмрд┐рд▓реНрдб рд╕рд░рд▓ рдЪрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ:
export CC="__llvm-gcc" export CFLAGS="-arch armv7 -arch armv7s -pipe -Os -gdwarf-2 -isysroot __iPhoneOS.sdk" export LDFLAGS="-arch armv7 -arch armv7s -isysroot __iPhoneOS.sdk" curl -O http://curl.haxx.se/download/curl-7.31.0.tar.gz tar -xzf curl-7.31.0.tar.gz cd curl-7.31.0 ./configure --disable-shared --enable-static --disable-dependency-tracking --host=armv7-apple-darwin make 

IOS рдкрд░ HTTPS рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ --with-darwinssl рд╕реНрд╡рд┐рдЪ (рдХреЗрд╡рд▓ iOS5 рдФрд░ рдЙрдЪреНрдЪрддрд░ рдХреЗ рд▓рд┐рдП) рдХреЗ рд╕рд╛рде cURL рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
рдкрд╣рд▓реЗ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдУрдкрдирдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

Android рдирд┐рд░реНрдорд╛рдг

CURL рдкреНрд░рд▓реЗрдЦрди Android рдХреЗ рд▓рд┐рдП рджреЛ рдирд┐рд░реНрдорд╛рдг рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ:

Android рдХреЗ рд▓рд┐рдП рдмрдирд╛рдПрдБ, рдпрд╣ рджреВрд╕рд░рд╛ рддрд░реАрдХрд╛ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореЗрдХ-рдУрд╕реНрдЯрд╛рд▓реЛрди-toolchain.sh рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдХрд░ рдЯреВрд▓рдЪреЗрди рдЬреЗрдирд░реЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛
рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ Android NDK STANDALONE-TOOLCHAIN.html рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯреВрд▓рдХрд┐рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рдерд╛ (MAC OS X, Android NDK r8e, android-14, gcc4.7):
 $NDK_ROOT/build/tools/make-standalone-toolchain.sh \ --platform=android-14 \ --install-dir=android-toolchain-gcc4.7 \ --toolchain=arm-linux-androideabi-4.7 \ --system=darwin-x86_64 #   NDK_ROOT       Android NDK 

рдирддреАрдЬрддрди, рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ android-toolchain-gcc4.7 рдмрд╛рдВрд╣ android-14 рдФрд░ toolchain gcc4.7 рдХреЗ рд▓рд┐рдП sysroot рдХреА рдПрдХ рдкреНрд░рддрд┐ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред
рдЗрд╕ рдЯреВрд▓рдЪреИрди рдХреЛ рдСрдЯреЛрдЯреВрд▓рд╕ рдмрд┐рд▓реНрдб рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдПрдВрдбреНрд░реЙрдЗрдб рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
CURL рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
 $NDK_ROOT/build/tools/make-standalone-toolchain.sh --install-dir=toolchain bla-bla-bla export PATH=`pwd`/toolchain/bin:$PATH export CC=arm-linux-androideabi-gcc curl -O http://curl.haxx.se/download/curl-7.31.0.tar.gz tar -xzf curl-7.31.0.tar.gz cd curl-7.31.0 ./configure --disable-shared --enable-static --host=arm-linux-androideabi make 

HTTPS рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕реНрд░реЛрддреЛрдВ рд╕реЗ OpenSSL рдХрд╛ рд╕рдВрдХрд▓рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

рдпрд╣рд╛рдБ HTTP, HTTPS рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (MAC OS X, Xcode 4.6.3, iOS SDK 6.1) рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд╕рд╛рде iOS рдФрд░ Android рдХреЗ рд▓рд┐рдП libcurl рдмрдирд╛рдиреЗ рдХреА рдореЗрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ:
build.sh
 #!/bin/bash mkdir -p include mkdir -p prebuilt/ios/device mkdir -p prebuilt/ios/simulator mkdir -p prebuilt/android/armeabi-v7a # 0. Make "standalone toolchain" for android if [ ! -d android-toolchain-gcc4.7 ] then $NDK_ROOT/build/tools/make-standalone-toolchain.sh --platform=android-14 --install-dir=android-toolchain-gcc4.7 --toolchain=arm-linux-androideabi-4.7 --system=darwin-x86_64 fi # 1. Get sources LIBCURL_SRC=curl-7.31.0 OPENSSL_SRC=openssl-1.0.1e LIBCURL_PAGE=http://curl.haxx.se/download OPENSSL_PAGE=http://www.openssl.org/source LIBCURL_ROOT=curl OPENSSL_ROOT=openssl # param 1: lib name # param 2: download page # param 3: symlink to source dir # exit with status 1 if downloading failed function download_and_unpack() { TARBALL=$1.tar.gz echo $TARBALL if [ ! -f $TARBALL ] then curl -O $2/$TARBALL || exit 1 rm -rf $1 tar -xzf $TARBALL rm $3 ln -s $1 $3 fi } download_and_unpack $LIBCURL_SRC $LIBCURL_PAGE $LIBCURL_ROOT download_and_unpack $OPENSSL_SRC $OPENSSL_PAGE $OPENSSL_ROOT # 2. Build sources CURL_EXTRA="--enable-ipv6 --disable-ftp --disable-file --disable-ldap --disable-ldaps --disable-rtsp --disable-proxy --disable-dict --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smtp --disable-gopher --disable-sspi --disable-manual" LIBCURL_BINARY=lib/.libs/libcurl.a CPU_COUNT=`sysctl -n hw.logicalcpu_max` export IPHONEOS_DEPLOYMENT_TARGET="5.0" # 2.1 Build cURL for iOS device (armv7, armv7s) pushd $LIBCURL_ROOT export CC="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/llvm-gcc-4.2" export CFLAGS="-arch armv7 -arch armv7s -pipe -Os -gdwarf-2 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk" export LDFLAGS="-arch armv7 -arch armv7s -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk" ./configure --disable-shared --enable-static --disable-dependency-tracking --host=armv7-apple-darwin --with-darwinssl $CURL_EXTRA || exit 1 make clean && make -j $CPU_COUNT || exit 1 cp -f $LIBCURL_BINARY ../prebuilt/ios/device popd # 2.2 Build cURL for iOS simulator (i386) pushd $LIBCURL_ROOT export CC="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/llvm-gcc-4.2" export CFLAGS="-arch i386 -pipe -Os -gdwarf-2 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk" export CPPFLAGS="-D__IPHONE_OS_VERSION_MIN_REQUIRED=${IPHONEOS_DEPLOYMENT_TARGET%%.*}0000" export LDFLAGS="-arch i386 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator6.1.sdk" ./configure --disable-shared --enable-static --disable-dependency-tracking --host=i386-apple-darwin --with-darwinssl $CURL_EXTRA || exit 1 make clean && make -j $CPU_COUNT || exit 1 cp -f $LIBCURL_BINARY ../prebuilt/ios/simulator popd # 2.3.1 Build OpenSSL for Android pushd $OPENSSL_ROOT # See 0 above export PATH=`pwd`/../android-toolchain-gcc4.7/bin:$PATH export CC=arm-linux-androideabi-gcc export CXX=arm-linux-androideabi-g++ export AR=arm-linux-androideabi-ar export RANLIB=arm-linux-androideabi-ranlib ./Configure android-armv7 no-shared || exit 1 make clean && make build_crypto build_ssl -j $CPU_COUNT || exit 1 cp -f libcrypto.a ../prebuilt/android/armeabi-v7a cp -f libssl.a ../prebuilt/android/armeabi-v7a popd # 2.3.2 Build CURL for Android pushd $LIBCURL_ROOT OPENSSL=`pwd`/../openssl export CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16" export CPPFLAGS=-DANDROID export LDFLAGS="-march=armv7-a -Wl,--fix-cortex-a8 -L$OPENSSL" ./configure --disable-shared --enable-static --host=arm-linux-androideabi --with-random=/dev/urandom --with-ssl=$OPENSSL --without-ca-bundle --without-ca-path --with-zlib $CURL_EXTRA || exit 1 make clean && make -j $CPU_COUNT || exit 1 cp -f $LIBCURL_BINARY ../prebuilt/android/armeabi-v7a popd # 3 Copy headers cp -f ./curl/include/curl/*.h ./include 


рдореБрдЦреНрдп рдЪрд░рдг:

рд╕рдВрдХрд▓рд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдкреНрд░реАрдмрд┐рд▓реНрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЙрдкрдпреБрдХреНрдд рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдЯреВрд▓рдХрд┐рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рд╕рдВрдмрдВрдзрд┐рдд рд▓рд┐рдВрдХ:
CURL рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдкреНрд░рд▓реЗрдЦрди
CURL iOS рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рддрд╛ рд╣реИ
Android NDK рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдЯреВрд▓рдЪрд┐рди

Source: https://habr.com/ru/post/In184960/


All Articles