分类: LINUX
2013-02-18 16:49:00
对于libcurl大家在熟悉不过了,不做过多的介绍,
这是libcurl的官网
最近要在android工程中实现http等协议的下载,于是自然想到了libcurl,但是移植它到android还是走了一些弯路。
有很多网友尝试用NDK来编译libcurl,参考了很多资料,并且libcurl自身也有了Android.mk,但是我始终没有编译成功,无奈之下想到了
传统的交叉编译,结合先前从ndk中制作的独立的交叉编译工具链,终于成功了,方便可用。
1、NDK编译的方法可以参考:
http://blog.csdn.net/vrix/article/details/7683212
2、交叉编译
准备好工具链arm-linux-androideabi-4.6.tar.bz2,例如将其解压在/home/work/目录下,在ubuntu机子上,将其加入环境变量,
$vim ~/.bashrc
在最后加上
#for android standalone toolchain
export PATH=/home/work/arm-linux-androideabi-4.6/bin:$PATH
$source ~/.bashrc
然后
$cd curl-7.28.1
$./configure --prefix=/usr/local/android --host=arm-linux-androideabi CC=arm-linux-androideabi-gcc CFLAGS='-Os' --enable-debug --enable-optimize --enable-static --disable-ftp --without-zlib --disable-rtsp --disable-dict --disable-proxy --disable-telnet --disable-tftp --disable-pop3 --disable-imap --disable-smtp --disable-ipv6 --enable-http -enable-crypto-auth --without-gnutls --without-nss --without-ca-bundle
$make -j4
$sudo make install
就可以在/usr/local/android目录下生成libcurl相关的库了,然后可以将其放到你的android工程的jni目录下,以本地库的形式提供,
最好在jni的目录下建一个arm-linux-androideabi目录,将/usr/local/android目录下的内容全部拷贝过去,然后在arm-linux-androideabi
的同级目录下的Android.mk里面指定一下本地库的地址
LIVETVROOT := $(LOCAL_PATH)/liveTV
LOCALLIBROOT := $(LOCAL_PATH)/arm-linux-androideabi
然后使用时在相应的Android.mk中这样指定即可
LOCAL_C_INCLUDES += \
$(LOCALLIBROOT)/include
LOCAL_LDLIBS := -L$(LOCALLIBROOT)/lib \
-lcurl