libCurl을 SSL 지원으로 안드로이드에 포팅하려고합니다. 1 단계는 ssl 지원없이 컬링을 포팅하는 것입니다. 하지만 문제가 생겼어.libcurl with ssl support
dev 웹 사이트 및 Android.mk 파일에서 읽은 것처럼 어려운 부분은 먼저 make를 구성합니다. 그래서 내가 한 것은 :
다운로드 안드로이드 소스 코드 (! 중간 libs와 일부 필요하기 때문에 컴파일)
다운로드 컬
압축을 풀고 컬 미만 : {android_src}/external/curl
이 내용으로 외부/curl 폴더에 sh 파일을 작성하여 curl에 대한 configure 스크립트를 작성하십시오.
구성 : 제공
curl version: 7.26.0 Host setup: arm-unknown-eabi Install prefix: /usr/local Compiler: /home/tanco/Development/AOSP/2.3.3/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc SSL support: no (--with-{ssl,gnutls,nss,polarssl,cyassl,axtls}) SSH support: no (--with-libssh2) zlib support: enabled krb4 support: no (--with-krb4*) GSSAPI support: no (--with-gssapi) SPNEGO support: no (--with-spnego) TLS-SRP support: no (--enable-tls-srp) resolver: default (--enable-ares/--enable-threaded-resolver) ipv6 support: no (--enable-ipv6) IDN support: no (--with-libidn) Build libcurl: Shared=no, Static=yes Built-in manual: enabled --libcurl option: enabled (--disable-libcurl-option) Verbose errors: enabled (--disable-verbose) SSPI support: no (--enable-sspi) ca cert bundle: /etc/ssl/certs/ca-certificates.crt ca cert path: no LDAP support: no (--enable-ldap/--with-ldap-lib/--with-lber-lib) LDAPS support: no (--enable-ldaps) RTSP support: enabled RTMP support: no (--with-librtmp) Protocols: DICT FILE FTP GOPHER HTTP IMAP POP3 RTSP SMTP TELNET TFTP SONAME bump: yes - WARNING: this library will be built with the SONAME number bumped due to (a detected) ABI breakage. See lib/README.curl_off_t for details on this.
우선 이상한 것은 : 컬/libcurl에 구축 구성
`
export A=/home/user/Development/AOSP/2.3.3
export CC=$A/prebuilt/linux-x86/toolchain/arm-eabi-4.2.1/bin/arm-eabi-gcc
export NDK=/home/user/Development/Tools/sdk/android/ndk
export NDKLIBS=$NDK/platforms/android-4/arch-arm/usr/include
export SYSROOT=$A/ndk/build/platforms/android-4/arch-arm
export CPPFLAGS="-I $A/system/core/include"
export LDFLAGS="-L$A/out/target/product/generic/obj/lib/ -L$A/out/target/product/generic/system/lib/-L$SYSROOT/usr/lib -Wl,--gc-sections -nostdlib -lc -lm -ldl -llog -lgcc -Wl,--no-undefined,-z,nocopyreloc -Wl,-dynamic-linker,/system/bin/linker -L$NDK/out/target/product/generic/obj/lib/"
export CFLAGS="-fno-exceptions -Wno-multichar -mthumb -mthumb-interwork -nostdlib -lc -ldl -lm -march=armv5te -mtune=xscale -msoft-float -mandroid -fPIC -mthumb-interwork -mthumb -mlong-calls -ffunction-sections -fstack-protector -fno-short-enums -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -DANDROID -DOS_ANDROID -D__NEW__ -D__SGI_STL_INTERNAL_PAIR_H -I$SYSROOT/usr/include -I $A/system/core/include -I $NDKLIBS"
./configure --host=arm-eabi --with-ssl=$A/external/openssl
` 그리고 출력 요약이 하나입니다 링커가 중간 lib를 보여주기 때문에 SSL이 config에 포함되지 않는 이유는 무엇입니까? s 및 ssl 지원 플래그가 호출되었지만 빌드를 위해 만든 jni 프로젝트에서 동일한 curl_config.h 파일을 사용한 후에 (독립 실행 형 Android.mk 파일이 있기 때문에 jni 폴더에서 압축을 풀면 간단히 컴파일 될 수 있습니다 안드로이드 프로젝트의 AOSP 소스에서 생성 된 설정 파일을 복사하고 전화 NDK 빌드)
그래서 난 컴파일하고 내가 얻을 : 여기
$ ndk-build
Compile thumb : curl <= url.c
In file included from /Projects/temp/testNDK/jni/lib/url.c:32:0:
/Tools/sdk/android/ndk/platforms/android-14/arch-arm/usr/include/unistd.h: In function 'getpagesize':
/Tools/sdk/android/ndk/platforms/android-14/arch-arm/usr/include/unistd.h:171:3: warning: nested extern declaration of '__page_size' [-Wnested-externs]
/Tools/sdk/android/ndk/platforms/android-14/arch-arm/usr/include/unistd.h: In function '__getpageshift':
/Tools/sdk/android/ndk/platforms/android-14/arch-arm/usr/include/unistd.h:175:3: warning: nested extern declaration of '__page_shift' [-Wnested-externs]
/Projects/temp/testNDK/jni/lib/url.c: At top level:
/Projects/temp/testNDK/jni/lib/url.c:57:2: error: #error "We can't compile without socket() support!"
make: *** [/Projects/temp/testNDK/obj/local/armeabi/objs/curl/lib/url.o] Error 1
감사합니다. 귀하의 조언을 구했지만 full sdk 대신 cURL 설치 안내서에 나와있는 독립형 toochain 만 사용했습니다. 그런 다음 openssl 헤더와 .so 파일을 툴체인의 폴더에 복사하고 각각 LDFLAGS와 CPPFLAGS를 설정했습니다. 단순한 --with-ssl은 일단 트릭을 만들었습니다. 따라서 향후 참조를 위해 : 전체 Android SDK를 사용할 필요가 없으며 툴체인도 가능한 방법입니다. – domenukk
이제 2 년전에 AOSP 외부에서 편집 할 수 없었습니다 – Tancho
여기에 명령을 수정해야만했는데 http://pastebin.com/qzxzc592는 모두에게 필요한지 확실하지 않습니다. – ruler501