移植curl到android操作系统

上一篇 / 下一篇  2011-04-27 14:10:15 / 个人分类:解决方案

  在实验中需要将curl移植到开发板上(android 2.1操作系统)。
之前按照网上的资料,使用交叉编译工具arm-none-linux-gnueabi-gcc交叉编译,并指定为静态编译。编译成功后,将二进制文件拷入到开发板中时,进入所在目录,修改权限为777后,使用命令./curl,显示的错误为:/system/bin/busybox/ash:./curl:command not found。
尝试了多种版本的源码和交叉编译工具后均失败。

  原因为:单独编译curl时,仍然是动态编译,curl在使用时,还需要调用内核中的一些动态库。而android操作系统中缺少这些库,因此这种方法不奏效。
  
  解决思路为:将curl源码放入到android源码中,使用curl中的Android.mk作为makefile,并在配置参数时将curl用到的内核库加入,在android根目录下编译。

  今天在网上看到一份指导资料,经过尝试后成功,具体方法如下:
1.版本信息:android 2.1 &curl 7.21.4
2.编译过程:
2.1将curl源码放入到android根目录下的external文件夹中,
(1)ANDROID_ROOT=/root/Desktop/ut6410-android2.1-v2.0 
(2)PATH="$ANDROID_ROOT/prebuilt/linux-x86/toolchain/i686-unknown-linux-gnu-4.2.1/bin:$PATH" 
(3)./configure --host=x86-linux CC=i686-unknown-linux-gnu-gcc --disable-shared CPPFLAGS="-I $ANDROID_ROOT/external/curl/include/ -I $ANDROID_ROOT/external/curl -I $ANDROID_ROOT/out/target/product/eeepc/obj/STATIC_LIBRARIES/libcurl_intermediates -I $ANDROID_ROOT/system/core/include -I $ANDROID_ROOT/hardware/libhardware/include -I $ANDROID_ROOT/hardware/libhardware_legacy/include -I $ANDROID_ROOT/hardware/ril/include -I $ANDROID_ROOT/dalvik/libnativehelper/include -I $ANDROID_ROOT/frameworks/base/include -I $ANDROID_ROOT/frameworks/base/opengl/include -I $ANDROID_ROOT/external/skia/include -I $ANDROID_ROOT/out/target/product/eeepc/obj/include -I $ANDROID_ROOT/bionic/libc/arch-x86/include -I $ANDROID_ROOT/bionic/libc/include -I $ANDROID_ROOT/bionic/libstdc++/include -I $ANDROID_ROOT/bionic/libc/kernel/common -I $ANDROID_ROOT/bionic/libc/kernel/arch-x86 -I $ANDROID_ROOT/bionic/libm/include -I $ANDROID_ROOT/bionic/libm/include/i387 -I $ANDROID_ROOT/bionic/libthread_db/include -I $ANDROID_ROOT/external/openssl/include" CFLAGS="-fno-exceptions -Wno-multichar -march=i686 -m32 -fPIC -include $ANDROID_ROOT/system/core/include/arch/target_linux-x86/AndroidConfig.h -m32 -DANDROID -fmessage-length=0 -fno-strict-aliasing -Wno-unused -Winit-self -Wpointer-arith -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wpointer-arith -Wwrite-strings -Wunused -Winline -Wnested-externs -Wmissing-declarations -Wmissing-prototypes -Wno-long-long -Wfloat-equal -Wno-multichar -Wsign-compare -Wno-format-nonliteral -Wendif-labels -Wstrict-prototypes -Wdeclaration-after-statement -Wno-system-headers" LIB="$ANDROID_ROOT/prebuilt/linux-x86/toolchain/i686-unknown-linux-gnu-4.2.1/lib/gcc/i686-unknown-linux-gnu/4.2.1/libgcc.a $ANDROID_ROOT/prebuilt/linux-x86/toolchain/i686-unknown-linux-gnu-4.2.1/lib/gcc/i686-unknown-linux-gnu/4.2.1/crtbegin.o $ANDROID_ROOT/prebuilt/linux-x86/toolchain/i686-unknown-linux-gnu-4.2.1/lib/gcc/i686-unknown-linux-gnu/4.2.1/crtend.o"
2.2回到android根目录,make curl
耐心等待半个小时吧,就可以看到编译成功了!!
如下图:
3.根据结果提示,进入out/target文件夹中寻找,最后编译出的curl应该为1.5M。将它拷入android文件系统中,直接运行,成功鸟~~

以及curl源码中的Android.mk指导。

TAG:

 

评分:0

我来说两句

我的栏目

日历

« 2024-04-18  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 30504
  • 日志数: 22
  • 图片数: 3
  • 建立时间: 2011-03-09
  • 更新时间: 2011-05-17

RSS订阅

Open Toolbar