OpenSSL&&libcurl库的交叉编译
一、编译前环境准备
使用的内核: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/目录,再后面就是指名CC和CXX,表示你的交叉编译器,这里./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库的交叉编译的更多相关文章
- C++ 用libcurl库进行http通讯网络编程
使用libcurl完成http通讯,很方便而且是线程安全,转载一篇比较好的入门文章 转载自 http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724 ...
- C++ 用libcurl库进行http通讯网络编程(转)
转载:http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三. ...
- C++ 用libcurl库进行http通讯网络编程[转]
http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.cur ...
- C/C++ 用libcurl库进行http通讯网络编程
C/C++ 用libcurl库进行http通讯网络编程 目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_p ...
- C++ 用libcurl库进行http 网络通讯编程
一.LibCurl基本编程框架libcurl是一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议.libcur ...
- HTTP多线程下载+断点续传(libcurl库)
目录索引: 一.LibCurl基本编程框架 二.一些基本的函数 三.curl_easy_setopt函数部分选项介绍 四.curl_easy_perform 函数说明(error 状态码) 五.lib ...
- 最全的libcurl库资源整理
C++ 用libcurl库进行http 网络通讯编程 百度登陆协议分析!!!用libcurl来模拟百度登陆 C++使用libcurl做HttpClient 使用libcurl库进行HTTP的下载 li ...
- libcurl库的编译
终于弄懂了libcurl库的编译,记下来免得忘记. 下载地址: libcurl库:http://curl.haxx.se/latest.cgi?curl=zip openssl安装包:http ...
- (转)libcurl库使用方法,好长,好详细。
一.ibcurl作为是一个多协议的便于客户端使用的URL传输库,基于C语言,提供C语言的API接口,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP ...
- C++ 用libcurl库进行http通讯网络编程 【转】
http://www.cnblogs.com/moodlxs/archive/2012/10/15/2724318.html C++ 用libcurl库进行http通讯网络编程 目录索引: 一.Lib ...
随机推荐
- Unlink原理和一些手法
Unlink原理和一些手法 简单介绍一下unlink相关的知识 unlink是利用glibc malloc 的内存回收机制造成攻击的,核心就在于当两个free的堆块在物理上相邻时,会将他们合并,并将原 ...
- 2024-05-04:用go语言,给定一个起始索引为0的字符串s和一个整数k。 要进行分割操作,直到字符串s为空: 选择s的最长前缀,该前缀最多包含k个不同字符; 删除该前缀,递增分割计数。如果有剩余
2024-05-04:用go语言,给定一个起始索引为0的字符串s和一个整数k. 要进行分割操作,直到字符串s为空: 选择s的最长前缀,该前缀最多包含k个不同字符: 删除该前缀,递增分割计数.如果有剩余 ...
- 聊聊流言协议(Gossip)
什么是流言协议? 在分布式系统中,以下两个是典型的问题: 维护系统状态(节点的活跃性) 节点间的通信 解决这些问题的解决方案之一如下: 集中式状态管理服务 对等状态管理服务 集中式状态管理服务 像 A ...
- GitLab 管理 NuGet 包
1 概览 在服务器上构建项目时,需要引用 nuget.org 之外的包,如公司内部开发的.第三方未发布到 nuget.org 上的.怎么办? GitLab 提供了 Package Registry 来 ...
- Kubernetes(K8S)安装
Kubermetes (K8S) 安装 参考文档: 官方文档: https://kubernetes.io/zh-cn/docs/concepts/overview/components/#node- ...
- 日常Bug排查-连接突然全部关闭
日常Bug排查-连接突然全部关闭 前言 日常Bug排查系列都是一些简单Bug的排查.笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材. Bug现场 最近碰到一个问题,一台机器上的连接数在达到 ...
- python 日志 logging模块详解
1.基本使用 配置logging基本的设置,然后在控制台输出日志, import logging logging.basicConfig(level=logging.INFO, format='%(a ...
- 2024-05-18:用go语言,给定一个从 0 开始的字符串 s,以及两个子字符串 a 和 b,还有一个整数 k。 定义一个“美丽下标”,当满足以下条件时: 1.找到字符串 a 在字符串 s 中的位
2024-05-18:用go语言,给定一个从 0 开始的字符串 s,以及两个子字符串 a 和 b,还有一个整数 k. 定义一个"美丽下标",当满足以下条件时: 1.找到字符串 a ...
- 记一次Nacos漏洞的复现 --> 身份认证绕过漏洞(QVD-2023-6271)
前记 端午前两天,遇到公司某客户的站点是Nacos,随后就是网上搜一波漏洞,搜到 QVD-2023-6271,故做以下记录 漏洞复现 漏洞描述 漏洞原理为开源服务管理平台 Nacos在默认配置下未对 ...
- pgsql安装与主从配置搭建
一:安装环境 查看一下安装环境:cat /etc/centos-release CentOS Linux release 7.7.1908 (Core) 二:软件下载 https://www.post ...