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.c
LOCAL_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:=libcurl
include $(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 directory
compilation 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 directory
compilation 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 type
make: *** [/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:=libsqlite3
include $(BUILD_SHARED_LIBRARY)

就ok了。
3、编译。

要在Ubuntu上移植libcurl,你需要按照以下步骤进行操作: 1. 首先,确保你已经安装了必要的开发工具和库文件。可以使用以下命令来安装所需的软件包: sudo apt-get install build-essential libssl-dev 2. 下载libcurl的源代码。你可以从libcurl官方网站下载最新版本的源代码。 [1] 3. 解压下载的源代码文件。进入解压后的目录。 4. 打开终端并执行以下命令来配置编译选项和安装路径: ./configure --prefix=/usr/local 5. 运行make命令来编译libcurl: make 6. 运行下面的命令以安装libcurl到指定的路径: sudo make install 7. 现在,libcurl已经成功移植到Ubuntu上了。你可以在你的代码中使用libcurl库了。 请注意,以上步骤仅适用于在Ubuntu上移植libcurl。如果你要在其他操作系统上进行移植,请参考相应的操作系统文档以获取更详细的指导。 引用内容: //curl_easy_setopt(curl, CURLOPT_WRITEDATA, recv); 移植libcurl到sylixos系统,配置sharelib的时候,需要在专家模式下修改libcurl.mk,这个文件中定义的LOCAL_CFLAGS和LOCAL_DSYMBOL,在移植的时候花费了很多时间,所以比较有参考意义。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [ubuntu移植libcurlAndroid平台](https://blog.csdn.net/weixin_32620265/article/details/117858880)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *3* [Sylixos移植libcurl所用配置文件](https://download.csdn.net/download/baidu_19348579/16679093)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寒江蓑笠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值