社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 110|回复: 0

[原创] libcurl在mtk7688上的移植

[复制链接]

3537

TA的帖子

5

TA的资源

五彩晶圆(中级)

Rank: 8Rank: 8

荣誉会员勋章

发表于 2018-6-21 13:41:45 | 显示全部楼层 |阅读模式
                                                             libcurl在mtk7688上的移植
            之前用libcurl在linux x86平台做了些简单的应用开发,如果需要移植到mtk7688平台上,虽然他们都是跑的linux,但是由于芯片不同,就涉及到交叉编译,最近用到的开源库很多,经常交叉编译,又是各种出错,不知道是自己运气太差还是什么原因,根据常规方法配置总是报错,最终还是解决了。
   我之前下载了最新版本的libcurl,7.60版本,没有的源码的需要自己去官网下载
第一步输入如下命令:
./configure --prefix=/home/wateras/curtest/ CC=mipsel-openwrt-linux-gcc --host=mipsel-linux   --enable-static

马上就报出一个如下错误
checking for nroff... /usr/bin/nroff
checking how to use *nroff to get plain text from man pages... -man
checking whether to enable the threaded resolver... yes
checking whether to use POSIX threads for threaded resolver... auto
checking pthread.h usability... yes
checking pthread.h presence... yes
checking for pthread.h... yes
checking for pthread_create... no
checking for pthread_create in -lpthread... no
configure: error: Threaded resolver enabled but no thread library found


想不到第一步就挂了,看错误是我们使能了多线程resolver,但是没有线程库,问题是我也没用到,那就禁止掉呗

那就输入下面的命令:
./configure --prefix=/home/wateras/curtest/ CC=mipsel-openwrt-linux-gcc --host=mipsel-linux  --disable-threaded-resolver --enable-static

输出部分信息:
config.status: creating packages/AIX/RPM/curl.spec
config.status: creating curl-config
config.status: creating libcurl.pc
config.status: creating lib/curl_config.h
config.status: lib/curl_config.h is unchanged
config.status: executing depfiles commands
config.status: executing libtool commands
configure: amending lib/Makefile
configure: amending src/Makefile
configure: amending tests/unit/Makefile
configure: amending tests/server/Makefile
configure: amending tests/libtest/Makefile
configure: amending docs/examples/Makefile
configure: Configured to build curl/libcurl:

  curl version:     7.60.0
  Host setup:       mipsel-unknown-linux-gnu
  Install prefix:   /home/wateras/curtest
  Compiler:         mipsel-openwrt-linux-gcc
  SSL support:      no      (--with-{ssl,gnutls,nss,polarssl,mbedtls,cyassl,axtls,winssl,darwinssl} )
  SSH support:      no      (--with-libssh2)
  zlib support:     no      (--with-zlib)
  brotli support:   no      (--with-brotli)
  GSS-API support:  no      (--with-gssapi)
  TLS-SRP support:  no      (--enable-tls-srp)
  resolver:         default (--enable-ares / --enable-threaded-resolver)
  IPv6 support:     enabled
  Unix sockets support: enabled
  IDN support:      no      (--with-{libidn2,winidn})
  Build libcurl:    Shared=yes, 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:   no
  ca cert path:     
  ca fallback:      
  LDAP support:     no      (--enable-ldap / --with-ldap-lib / --with-lber-lib)
  LDAPS support:    no      (--enable-ldaps)
  RTSP support:     enabled
  RTMP support:     no      (--with-librtmp)
  metalink support: no      (--with-libmetalink)
  PSL support:      no      (libpsl not found)
  HTTP2 support:    disabled (--with-nghttp2)
  Protocols:        DICT FILE FTP GOPHER HTTP IMAP POP3 RTSP SMTP TELNET TFTP


第二步
make
第三步
make install
以上三步就解决了生成mtk7688等mips平台下的lib库
wateras@wateras-virtual-machine:~/curtest$ make
mipsel-openwrt-linux-gcc  -g -Wall -c main.c           
mipsel-openwrt-linux-uclibc-gcc.bin: warning: environment variable 'STAGING_DIR' not defined
mipsel-openwrt-linux-gcc  -g -Wall -o main  main.o  -I/home/wateras/curtest/curl/include -L/home/wateras/curtest/lib  -lcurl
mipsel-openwrt-linux-uclibc-gcc.bin: warning: environment variable 'STAGING_DIR' not defined
mipsel-openwrt-linux-uclibc-gcc.bin: warning: environment variable 'STAGING_DIR' not defined
wateras@wateras-virtual-machine:~/curtest$ ./main
bash: ./main: cannot execute binary file: 可执行文件格式错误
wateras@wateras-virtual-machine:~/curtest$ ls -al
总用量 10468
drwxrwxr-x  8 wateras wateras    4096  6月 21 10:39 .
drwxr-xr-x 46 wateras wateras    4096  6月 21 10:39 ..
drwxrwxr-x  2 wateras wateras    4096  6月 21 10:30 bin
drwxr-xr-x  2 wateras wateras    4096  5月 30 15:37 curl
drwxr-xr-x 13 wateras wateras    4096  6月 21 09:58 curl-7.60.0
-rw-rw-r--  1 wateras wateras 3949173  5月 16 14:19 curl-7.60.0.tar.gz
drwxrwxr-x  3 wateras wateras    4096  6月 21 10:30 include
drwxrwxr-x  3 wateras wateras    4096  6月 21 10:30 lib
-rwxrwxr-x  1 wateras wateras   30010  6月 21 10:39 main
-rw-rw-r--  1 wateras wateras    3153  6月 21 10:39 main.c
-rw-rw-r--  1 wateras wateras   29536  6月 21 10:39 main.o
-rw-rw-r--  1 wateras wateras     273  6月 21 10:33 Makefile
-rw-rw-r--  1 wateras wateras     185  6月 20 15:34 Makefile111
drwxrwxr-x  4 wateras wateras    4096  6月 21 10:30 share
-rw-rw-r--  1 wateras wateras 6291460  6月 20 14:39 user2.bin
-rw-rw-r--  1 wateras wateras  357380  6月 19 17:25 user.bin


从红色字体我们可以看出生成的main执行文件已经是在mtk7688上运行的,如果不信可以用如下命令验证
wateras@wateras-virtual-machine:~/curtest$ file main
main: ELF 32-bit LSB  executable, MIPS, MIPS32 rel2 version 1, dynamically linked (uses shared libs), not stripped

一般常用的查看可执行文件命令如下:

1. file 可执行文件  可查看可执行文件是ARM架构还是X86架构

2. nm 可执行文件 可查看文件中的符号,包括全局变量,全局函数等

3. ldd 可执行文件 可查看文件执行所需要的动态库

4. strings 可执行文件 可查看文件中所有的符号,包括编译器版本信息

5. readelf 可执行文件 可查看文件的所有详细信息,包括文件的头信息,动态库信息,段信息等

接下里把main可执行文件放到mtk7688平台上运行

GR2LQCGS42CGUO[HYV5WOZ9.png


L29C}}20F(68VPIG)350YKL.png

我的测试代码就是curl下载文件,主要过程还是交叉编译lib文件费了些力气,每次都会爆出各种错误,于是又是神农百草般解决问题,以上方面可以在任何芯片架构移植,比如常见的ARM平台修改下CC就行和host就行,其他不需要修改(linux系统)。

此内容由EEWORLD论坛网友wateras1原创,如需转载或用于商业用途需征得作者同意并注明出处


此帖出自RF/无线论坛
淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2018-7-22 01:30 , Processed in 0.057966 second(s), 17 queries , Gzip On, Redis On.

快速回复 返回顶部 返回列表