当前位置: 代码迷 >> SQL >> Android移栽libcurl和libsqlite3
  详细解决方案

Android移栽libcurl和libsqlite3

热度:63   发布时间:2016-05-05 11:58:26.0
Android移植libcurl和libsqlite3

移植libcurl:

1、网上下载curl-7.32.0.tar.gz,解压;

2、下载主目录下configure,因为接下来编译的时候要用到curl_config.h,这个是在configure时生成的:

./configure --host=arm-linux CC=arm-linux-gnueabi-gcc

3、在主目录下编写Android.mk:

LOCAL_PATH := $(call my-dir)CURL_TOP := $(LOCAL_PATH)include $(CLEAR_VARS)include $(CURL_TOP)/lib/Android.mk

4、在lib目录下编写Android.mk,因为如果要生成libcurl.so,如果生成curl可执行文件的话,要把src下面也加上:

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES:= \file.c timeval.c base64.c hostip.c progress.c formdata.c     \cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c       \ldap.c ssluse.c version.c getenv.c escape.c mprintf.c telnet.c        \netrc.c getinfo.c transfer.c strequal.c easy.c security.c krb4.c      \curl_fnmatch.c fileinfo.c ftplistparser.c wildcard.c krb5.c           \memdebug.c http_chunks.c strtok.c connect.c llist.c hash.c multi.c    \content_encoding.c share.c http_digest.c md4.c md5.c  \http_negotiate.c inet_pton.c strtoofft.c strerror.c amigaos.c         \hostasyn.c hostip4.c hostip6.c hostsyn.c inet_ntop.c parsedate.c      \select.c gtls.c sslgen.c tftp.c splay.c strdup.c socks.c ssh.c nss.c  \qssl.c rawstr.c curl_addrinfo.c socks_gssapi.c socks_sspi.c           \curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c    \pingpong.c rtsp.c curl_threads.c warnless.c hmac.c polarssl.c         \polarssl_threadlock.c curl_rtmp.c openldap.c curl_gethostname.c       \gopher.c axtls.c idn_win32.c http_negotiate_sspi.c cyassl.c           \http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c      \curl_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_ntlm_msgs.c          \curl_sasl.c curl_schannel.c curl_multibyte.c curl_darwinssl.c         \hostcheck.c bundles.c conncache.c pipeline.c dotdot.c x509asn1.c      \gskit.cLOCAL_C_INCLUDES :=./ \        $(LOCAL_PATH)/../include #       /opt/arm-linux-gnueabi/arm-linux-gnueabi/libc/usr/include/ \#       /opt/arm-linux-gnueabi/arm-linux-gnueabi/libc/usr/include/arm-linux-gnueabi/LOCAL_CFLAGS :=  -DHAVE_CONFIG_H -I../include/curl -I../include -I../include -I../lib -I../lib -DBUILDING_LIBCURL -DCURL_HIDDEN_SYMBOLS -fvisibility=hidden -O2 -Wno-system-headers  -fPIC -DPIC LOCAL_LDLIBS:= -lc -ldl LOCAL_MODULE:=libcurlinclude $(BUILD_SHARED_LIBRARY)

5、接下来用ndk编译或者copy到源码环境中编译,会出现如下错误:

/home/usrhome/johnny.he/androidworkspace/jni_compile/jni_curl-7.32.2/jni/lib/if2ip.c:44:23: fatal error: ifaddrs.h: No such file or directorycompilation terminated.

在if2ip.c中我们发现ifaddrs.h是在宏HAVE_IFADDRS_H中的,在lib/curl_config.h中把这个宏注释掉就ok了,
再编译会有:

/home/usrhome/johnny.he/androidworkspace/jni_compile/jni_curl-7.32.2/jni/lib/if2ip.c:47:23: fatal error: stropts.h: No such file or directorycompilation terminated.
同样在在lib/curl_config.h中把HAVE_STROPTS_H宏注释掉就ok了,
再编译,还有错误:
/home/usrhome/johnny.he/androidworkspace/jni_compile/jni_curl-7.32.2/jni/lib/if2ip.c: In function 'Curl_if_is_interface_name':/home/usrhome/johnny.he/androidworkspace/jni_compile/jni_curl-7.32.2/jni/lib/if2ip.c:75:47: error: dereferencing pointer to incomplete type/home/usrhome/johnny.he/androidworkspace/jni_compile/jni_curl-7.32.2/jni/lib/if2ip.c:76:29: error: dereferencing pointer to incomplete type/home/usrhome/johnny.he/androidworkspace/jni_compile/jni_curl-7.32.2/jni/lib/if2ip.c: In function 'Curl_if2ip':/home/usrhome/johnny.he/androidworkspace/jni_compile/jni_curl-7.32.2/jni/lib/if2ip.c:97:47: error: dereferencing pointer to incomplete type/home/usrhome/johnny.he/androidworkspace/jni_compile/jni_curl-7.32.2/jni/lib/if2ip.c:98:15: error: dereferencing pointer to incomplete type/home/usrhome/johnny.he/androidworkspace/jni_compile/jni_curl-7.32.2/jni/lib/if2ip.c:99:17: error: dereferencing pointer to incomplete type/home/usrhome/johnny.he/androidworkspace/jni_compile/jni_curl-7.32.2/jni/lib/if2ip.c:100:33: error: dereferencing pointer to incomplete type/home/usrhome/johnny.he/androidworkspace/jni_compile/jni_curl-7.32.2/jni/lib/if2ip.c:127:51: error: dereferencing pointer to incomplete type/home/usrhome/johnny.he/androidworkspace/jni_compile/jni_curl-7.32.2/jni/lib/if2ip.c:135:36: error: dereferencing pointer to incomplete typemake: *** [/home/usrhome/johnny.he/androidworkspace/jni_compile/jni_curl-7.32.2/obj/local/armeabi/objs/curl/if2ip.o] Error 1

找到if2ip.c文件的47行,发现Curl_if_is_interface_name()函数是在HAVE_GETIFADDRS中的,同样在lib/curl_config.h中把这个宏注释掉就ok。
再编译就生成了liburl.so了。


移植libsqlite3

1、网上下载sqlite-autoconf-3080002.tar.gz,解压。
2、在主目录中写Android.mk:

LOCAL_PATH:= $(call my-dir)include $(CLEAR_VARS)LOCAL_SRC_FILES:= \        shell.c \        sqlite3.c \LOCAL_C_INCLUDES :=./ LOCAL_CFLAGS := -DPACKAGE_NAME=\"sqlite\" -DPACKAGE_TARNAME=\"sqlite\" -DPACKAGE_VERSION=\"3.8.0.2\" "-DPACKAGE_STRING=\"sqlite 3.8.0.2\"" -DPACKAGE_BUGREPORT=\"http://www.sqlite.org\" -DPACKAGE_URL=\"\" -DPACKAGE=\"sqlite\" -DVERSION=\"3.8.0.2\" -D_FILE_OFFSET_BITS=64 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_FDATASYNC=1 -DHAVE_USLEEP=1 -DHAVE_LOCALTIME_R=1 -DHAVE_GMTIME_R=1 -DHAVE_DECL_STRERROR_R=1 -DHAVE_STRERROR_R=1 -I. -D_REENTRANT=1 -DSQLITE_THREADSAFE=1 -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_RTREE -g -O2 LOCAL_LDLIBS:= -lc -ldl LOCAL_MODULE:=libsqlite3include $(BUILD_SHARED_LIBRARY)

就ok了。
3、编译。

  相关解决方案