一、编译前环境准备

使用的内核:4.15.0-118-generic(命令:uname -r可以查看)

交叉编译器:aarch64-linux-gnu-gcc

curl源码:curl-7.72.0.tar.gz

openssl源码:openssl-1.1.1g.tar.gz

本地主机:Ubuntu 18.04.5 LTS

【注:网速不好,或者始终编译不出来的朋友可以直接加Q:3252570989获取编译好的库文件。】

二、编译openssl

因为curl依赖于openssl库,而且两个库都必须用交叉编译器编译出库文件。解压源代码tar -vxzf openssl-1.1.1g.tar.gz,进入目录openssl-1.1.1g/,在该目录下新建一个文件夹,我这里新建为rk3399_openssl/,(必须新建一个文件夹,不可以图方便,将编译好的库放到同母录下,否则会跟本地/usr/local里面的文件冲突,报一个名为“are the same file”的错误,然后make install不成功),然后首先生成Makefile,生成命令为:./config no-asm shared --prefix=/home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl,这里建议先执行export CC=/your/cross/compile/path/,比如我就是执行export CC=/usr/local/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc,,总之就是指名你用的交叉编译器,下面是我的:

hesetone@hesetone-PU451LD:~/Downloads$ which aarch64-linux-gnu-gcc
/usr/local/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc

然后开始生成openssl的Makefile,命令如下,当然,要确保用的是交叉编译器,不确定的话,可以在执行下面的命令之前echo $CC查看一下:

./config no-asm shared --prefix=/home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl

./config执行,会生成Makefile,然后重点来了!!!需要手动打开Makefile,将里面的-m64编译选项删掉,一共是2处!!!再执行命令make && make install,就会在你--prefix指定的目录下得到编译结果,分别是bin/, include/, lib/, share/, ssl/五个文件夹,如下所示:

三、编译curl

openssl编译得到如上结果就表示成功,可以开始编译libcurl库,同样的,我在curl-7.72.0/目录下新建文件夹rk3399_curl/,然后执行如下命令,(为了网页阅读方便,为在适当地方加了换行,其实整个是一条命令):

CPPFLAGS="-I/home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl/ -I/home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl/include"  
LDFLAGS="-L/home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl/lib" LIBS="-ldl" ./configure --host=aarch64
CC=/usr/local/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
CXX=/usr/local/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++ --with-ssl --enable-shared
--enable-static --disable-dict --disable-ftp --disable-imap --disable-ldap --disable-ldaps --disable-pop3 --disable-proxy
--disable-rtsp --disable-smtp --disable-telnet --disable-tftp --disable-zlib --without-ca-bundle --without-gnutls --without-libidn
--without-librtmp --without-libssh2 --without-nss --without-zlib --prefix=/home/hesetone/Downloads/curl-7.72.0/rk3399_curl

CPPFLAGS指向openssl编译新生成的incude/目录LDFLAGS指向lib/目录,再后面就是指名CCCXX,表示你的交叉编译器,这里./configure执行结果为:

configure: Configured to build curl/libcurl:

  Host setup:       aarch64-unknown-none
Install prefix: /home/hesetone/Downloads/curl-7.72.0/rk3399_curl
Compiler: /usr/local/aarch64/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
CFLAGS: -Werror-implicit-function-declaration -O2 -Wno-system-headers -pthread
CPPFLAGS: -isystem /home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl/ -isystem /home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl/include
LDFLAGS: -L/home/hesetone/Downloads/openssl-1.1.1g/rk3399_openssl/lib
LIBS: -lssl -lcrypto -ldl curl version: 7.72.0
SSL: enabled (OpenSSL)
SSH: no (--with-{libssh,libssh2})
zlib: no (--with-zlib)
brotli: no (--with-brotli)
zstd: no (--with-zstd)
GSS-API: no (--with-gssapi)
TLS-SRP: enabled
resolver: POSIX threaded
IPv6: enabled
Unix sockets: enabled
IDN: no (--with-{libidn2,winidn})
Build libcurl: Shared=no, Static=yes
Built-in manual: enabled
--libcurl option: enabled (--disable-libcurl-option)
Verbose errors: enabled (--disable-verbose)
Code coverage: disabled
SSPI: no (--enable-sspi)
ca cert bundle: no
ca cert path: no
ca fallback: no
LDAP: no (--enable-ldap / --with-ldap-lib / --with-lber-lib)
LDAPS: no (--enable-ldaps)
RTSP: no (--enable-rtsp)
RTMP: no (--with-librtmp)
Metalink: no (--with-libmetalink)
PSL: no (libpsl not found)
Alt-svc: no (--enable-alt-svc)
HTTP2: disabled (--with-nghttp2)
HTTP3: disabled (--with-ngtcp2, --with-quiche)
ESNI: no (--enable-esni)
Protocols: FILE GOPHER HTTP HTTPS SMB SMBS
Features: AsynchDNS HTTPS-proxy IPv6 NTLM NTLM_WB SSL TLS-SRP UnixSockets

然后执行make && make install,得到如下结果,也是lib/include/目录,复制到你的工程即可:

OpenSSL&&libcurl库的交叉编译的更多相关文章

  1. C++ 用libcurl库进行http通讯网络编程

    使用libcurl完成http通讯,很方便而且是线程安全,转载一篇比较好的入门文章 转载自 http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724 ...

  2. C++ 用libcurl库进行http通讯网络编程(转)

    转载:http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三. ...

  3. C++ 用libcurl库进行http通讯网络编程[转]

    http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.cur ...

  4. C/C++ 用libcurl库进行http通讯网络编程

    C/C++ 用libcurl库进行http通讯网络编程 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_p ...

  5. C++ 用libcurl库进行http 网络通讯编程

      一.LibCurl基本编程框架libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议.libcur ...

  6. HTTP多线程下载+断点续传(libcurl库)

    目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_perform 函数说明(error 状态码) 五.lib ...

  7. 最全的libcurl库资源整理

    C++ 用libcurl库进行http 网络通讯编程 百度登陆协议分析!!!用libcurl来模拟百度登陆 C++使用libcurl做HttpClient 使用libcurl库进行HTTP的下载 li ...

  8. libcurl库的编译

    终于弄懂了libcurl库的编译,记下来免得忘记. 下载地址:   libcurl库:http://curl.haxx.se/latest.cgi?curl=zip   openssl安装包:http ...

  9. (转)libcurl库使用方法,好长,好详细。

    一.ibcurl作为是一个多协议的便于客户端使用的URL传输库,基于C语言,提供C语言的API接口,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP ...

  10. C++ 用libcurl库进行http通讯网络编程 【转】

    http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html C++ 用libcurl库进行http通讯网络编程 目录索引: 一.Lib ...

随机推荐

  1. STM32F10X 部分引脚不能使用的问题

    一.概述 说来惭愧,我到现在都没有完整的学习过STM32.接触 STM32 还是突然的一个项目,需要用到 STM32,紧急需求,只能边学边完成.不过好在 ST 的资料还是比较多的,相对也比较简单,基本 ...

  2. Rust中的并发性:Sync 和 Send Traits

    在并发的世界中,最常见的并发安全问题就是数据竞争,也就是两个线程同时对一个变量进行读写操作.但当你在 Safe Rust 中写出有数据竞争的代码时,编译器会直接拒绝编译.那么它是靠什么魔法做到的呢? ...

  3. Soluton Set - ZJOI历年真题

    upd:不考浙江省选了.这个题解贴应该不会再更新了. upd:进省队了.再做点,再写点. ZJOI2022 Day1T1 Link&Submission. tag:组合计数,容斥 假设固定了第 ...

  4. ruby操作excel

    操作xlsx axlsx插件 操作xls spreadsheet插件

  5. Golang 爬虫02

    验证邮箱 目标站点: https://movie.douban.com/top250

  6. SQL使用ROW_NUMBER() OVER函数自动生成序列号

    语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) 简单的说ROW_NUMBER()从1开始,为每一条分组记录返回一个数字,这里的ROW ...

  7. windows远程桌面和远程协助有什么区别

    一言以蔽之: windows远程桌面是被动式的,只要你开启了这个功能选项,对方有地址和密码就能使用这台计算机. windows远程协助是主动式的,需要向对方提出协助请求,对方答应后即可登录电脑,协助操 ...

  8. toLua中Lua调用C#中的类

    toLua中Lua调用C#: [7]Lua脚本调用C#中的class 准备工作:打算在Lua脚本中使用Debug,使用lua调用C#脚本,需要绑定LuaState和自定义添加Debug --- --- ...

  9. C语言:如何删除在可视化网页中未可见的内容(网页txt)

    我这个代码仅仅限制于在chrome浏览器中下载china daliy的网页中实现删除可视化内容,因为每个网页的超链接或者文本主内容分布不一样,但是学会了删除一个网页类型的不可视化内容之后,修改其他网页 ...

  10. 2022年官网下安装Tomcat最全版与官网查阅方法

    目录 一.环境整合 构建工具(参考工具部署方式) 二.官网下载 三.解压安装 四.配置环境 五.启动运行 六.配置为服务 七.查看设置服务 一.环境整合 构建工具(参考工具部署方式) 软件名称 版本 ...