交叉编译aarch64架构支持openssl的curl、libcurl

news2025/1/23 10:32:37

本文档旨在指导读者在x86_64平台上交叉编译curl和openssl库以支持aarch64架构。在开始之前,请确保您的系统环境已正确配置。

1. 系统环境准备


系统是基于Ubuntu 20.04 LTS,高版本可能会有问题。首页,安装必要的开发工具和库文件。打开终端并执行以下命令:

sudo apt-get update
sudo apt-get install build-essential cmake gcc-aarch64-linux-gnu g++-aarch64-linux-gnu autoconf automake libtool

这些软件包将为您提供编译过程中所需的基本工具链。

2. OpenSSL交叉编译


2.1 支持的CPU架构

在开始交叉编译之前,请注意OpenSSL 1.1.1w支持广泛的CPU架构,包括aarch64。确保您的目标平台与此版本兼容。目录支持架构如下:

BS2000-OSD BSD-generic32 BSD-generic64 BSD-ia64 BSD-sparc64 BSD-sparcv8 BSD-x86 BSD-x86-elf BSD-x86_64 Cygwin Cygwin-i386 Cygwin-i486 Cygwin-i586 Cygwin-i686 Cygwin-x86 Cygwin-x86_64 DJGPP MPE/iX-gcc OS390-Unix QNX6 QNX6-i386 UEFI UWIN VC-CE VC-WIN32 VC-WIN64A VC-WIN64A-masm VC-WIN64I aix-cc aix-gcc aix64-cc aix64-gcc android android-armeabi android-mips android-x86 android64 android64-aarch64 bsdi-elf-gcc cc darwin-i386-cc darwin-ppc-cc darwin64-debug-test-64-clang darwin64-ppc-cc darwin64-x86_64-cc dist gcc haiku-x86 haiku-x86_64 hpux-ia64-cc hpux-ia64-gcc hpux-parisc-cc hpux-parisc-gcc hpux-parisc1_1-cc hpux-parisc1_1-gcc hpux64-ia64-cc hpux64-ia64-gcc hpux64-parisc2-cc hpux64-parisc2-gcc hurd-x86 ios-cross ios64-cross iphoneos-cross irix-mips3-cc irix-mips3-gcc irix64-mips4-cc irix64-mips4-gcc linux-aarch64 linux-alpha-gcc linux-aout linux-arm64ilp32 linux-armv4 linux-c64xplus linux-elf linux-generic32 linux-generic64 linux-ia64 linux-mips32 linux-mips64 linux-ppc linux-ppc64 linux-ppc64le linux-sparcv8 linux-sparcv9 linux-x32 linux-x86 linux-x86-clang linux-x86_64 linux-x86_64-clang linux32-s390x linux64-mips64 linux64-s390x linux64-sparcv9 mingw mingw64 nextstep nextstep3.3 purify qnx4 sco5-cc sco5-gcc solaris-sparcv7-cc solaris-sparcv7-gcc solaris-sparcv8-cc solaris-sparcv8-gcc solaris-sparcv9-cc solaris-sparcv9-gcc solaris-x86-gcc solaris64-sparcv9-cc solaris64-sparcv9-gcc solaris64-x86_64-cc solaris64-x86_64-gcc tru64-alpha-cc tru64-alpha-gcc uClinux-dist uClinux-dist64 unixware-2.0 unixware-2.1 unixware-7 unixware-7-gcc vms-alpha vms-alpha-p32 vms-alpha-p64 vms-ia64 vms-ia64-p32 vms-ia64-p64 vos-gcc vxworks-mips vxworks-ppc405 vxworks-ppc60x vxworks-ppc750 vxworks-ppc750-debug vxworks-ppc860 vxworks-ppcgen vxworks-simlinux debug debug-erbridge debug-linux-ia32-aes debug-linux-pentium debug-linux-ppro debug-test-64-clang

2.2 编译步骤

  1. 下载并解压OpenSSL源代码
    到https://www.openssl.org/source/ 下载openss源码包,当前使用的源码包是:
    https://www.openssl.org/source/openssl-1.1.1w.tar.gz
    运行以下命令:
cd /home/user/soft/
wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz
  1. 解压源码包
tar xvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
  1. 执行以下命令配置编译选项
./Configure -fPIC no-asm -static no-async linux-aarch64 --prefix=/path/to/openssl/output

确保将/path/to/openssl/output替换为您希望安装OpenSSL的目录路径。

  1. 接下来,执行以下命令以开始编译过程
make CC="aarch64-linux-gnu-gcc" AR="aarch64-linux-gnu-ar" RANLIB="aarch64-linux-gnu-ranlib" AS="aarch64-linux-gnu-as" LD="aarch64-linux-gnu-ld" NM="aarch64-linux-gnu-nm"
  1. 编译完成后,执行以下命令安装OpenSSL
make install

便在/path/to/openssl/output目录下生成如下目录结构:
在这里插入图片描述

3. CURL交叉编译


3.1 交叉编译步骤

  1. 下载并解压CURL源代码
    到 https://github.com/curl/curl/releases 下载curl源码,当前版本为8.5.0:
    在这里插入图片描述
cd /home/user/soft/
#可能需要架梯子
wget https://github.com/curl/curl/releases/download/curl-8_5_0/curl-8.5.0.tar.gz
  1. 解压源代码
tar xvf curl-8.5.0.tar.gz
cd curl-8.5.0
  1. 执行以下命令配置编译选项
./configure --target=aarch64-linux-gnu --host=aarch64-linux-gnu --build=x86_64-linux-gnu --with-pic --enable-static --disable-ldap --disable-ldaps --without-libidn --with-openssl=/path/to/openssl/output LDFLAGS=-ldl --prefix=/path/to/curl/output

确保将/path/to/openssl/output替换为您之前安装OpenSSL的目录路径,并将/path/to/curl/output替换为您希望安装CURL的目录路径。

  1. 接下来,执行以下命令以开始编译过程
make CC="aarch64-linux-gnu-gcc" AR="aarch64-linux-gnu-ar" RANLIB="aarch64-linux-gnu-ranlib" AS="aarch64-linux-gnu-as" LD="aarch64-linux-gnu-ld" NM="aarch64-linux-gnu-nm"
  1. 编译完成后,执行以下命令安装CURL
make install

在/path/to/curl/output目录生成如下图目录结构
在这里插入图片描述
lib目录下就有libcurl库
在这里插入图片描述

至此,您已成功交叉编译了支持aarch64平台的curl和openssl库。现在可以将这些库部署到相应的目标设备上使用了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1344068.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[足式机器人]Part4 南科大高等机器人控制课 CH12 Robotic Motion Control

本文仅供学习使用 本文参考: B站:CLEAR_LAB 笔者带更新-运动学 课程主讲教师: Prof. Wei Zhang 课程链接 : https://www.wzhanglab.site/teaching/mee-5114-advanced-control-for-robotics/ 南科大高等机器人控制课 Ch12 Robotic …

C++:第十一讲DFS深搜

Everyday English Your optimal career is simply this: Share the real you with physical world through th e process of creative self-expression. 你的最佳职业很简单,就是这样:通过创造性自我表达的途径和世界分享真实的你。 前言 今天带着大家…

【音视频 ffmpeg 学习】 跑示例程序 持续更新中

环境准备 在上一篇文章 把mux.c 拷贝到main.c 中 使用 attribute(unused) 消除警告 __attribute__(unused)/** Copyright (c) 2003 Fabrice Bellard** Permission is hereby granted, free of charge, to any person obtaining a copy* of this software and associated docu…

scanf函数返回值被忽略

心怀希望的前进 前言 最近在复习c语言,发现了许多之前不了解的知识,今天想来与大家分享一下scanf返回值值被忽略的问题。 很多人应该都在vs中见到过,我们先说原因,再说改进方法 原因: scanf函数在读取数据时不会检…

kafka实现延迟消息

背景 我们知道消息中间件mq是支持延迟消息的发送功能的,但是kafka不支持这种直接的用法,所以我们需要独立实现这个功能,以下是在kafka中实现消息延时投递功能的一种方案 kafka实现延时消息 主要的思路是增加一个检测服务,这个检…

Python武器库开发-武器库篇之上传本地仓库到Git(三十八)

武器库篇之上传本地仓库到Git(三十八) 当我们在Git中创建远程仓库和进行了SSH key免密登陆之后,我们点击 Your respositories 可以查看我们所创建的远程仓库,如图所示: 如果我们需要将本地的仓库上传到Git,首先我们需要建立一个本…

数据结构与算法 - 查找

文章目录 第1关:实现折半查找第2关:实现散列查找 第1关:实现折半查找 代码如下: /*************************************************************date: April 2009copyright: Zhu EnDO NOT distribute this code. ***********…

Python实现的面部健康特征识别系统

Python实现的面部健康特征识别系统 引言1. 数据集获取与准备2. 模型训练3. Flask框架的应用4. 前台识别测试界面 结论与展望 引言 本文将介绍一个基于Python的面部健康特征判别系统,该系统利用互联网获取的公开数据集,分为健康、亚健康和不健康三个类别…

蓝牙曝底层安全漏洞,数十亿设备受影响

内容概括: Eurecom的研究人员近期分享了六种新型攻击方式,统称为"BLUFFS",这些攻击方式能够破坏蓝牙会话的保密性,使设备容易受到冒充和中间人攻击(MitM)。攻击发现者Daniele Antonioli解释道,"BLUFFS…

Sentinel-3如何处理并下载LST数据-陆地表面温度”(Land Surface Temperature)

LST 通常指的是“陆地表面温度”(Land Surface Temperature)。陆地表面温度是指地球表面上陆地部分的温度,而不包括水体表面。LST 是遥感技术中一个重要的参数,可以通过卫星遥感等手段进行测量和监测。 陆地表面温度对于许多领域…

WPF 漂亮长方体、正文体简单实现方法 Path实现长方体 正方体方案 WPF快速实现长方体、正方体的方法源代码

这段XAML代码在WPF中实现了一个类似长方体视觉效果的图形 声明式绘制:通过Path、PathGeometry和PathFigure等元素组合,能够以声明方式精确描述长方体每个面的位置和形状,无需编写复杂的绘图逻辑,清晰直观。 层次结构与ZIndex控制…

利用 IntelliJ IDEA 整合 GitHub 实现项目版本控制与协作管理

目录 前言1 设置GitHub登录账号2 将项目分享到GitHub3 IntelliJ IDEA 中导入Github项目4 往GitHub推送代码4.1 Commit Change(提交到本地库)4.2 Git -> Repository -> Push(推送到远程库) 5 拉取远程库代码到本地6 克隆远程…

Python列表的介绍与操作 增改查,连接,赋值,复制,清空

列表 在日常中我们通过给变量赋值来存储数据,比如 a "hello" b "world" c "你好啊" d "....."由于变量一次只能存储一个数据,但我们如果想一次存储多个数据,的话这样存储会很复杂,所以,我们可以通过列表 列表(List)是Python中的…

彻底解决可视化:中文字体显示「豆腐块」问题!

问题复现 # 导入必要的包 library(ggplot2)# 设置主题样式 theme_set(theme_minimal(base_size 15))# 创建一个简单的折线图 ggplot(data data.frame(x c(1, 2, 3), y c(1, 2, 3)), aes(x x, y y)) geom_line(color "blue") labs(title "欢迎关注公众号…

鸿蒙HarmonyOS-图表应用

简介 随着移动应用的不断发展,数据可视化成为提高用户体验和数据交流的重要手段之一。在HarmonyOS应用开发中,一个强大而灵活的图表库是实现这一目标的关键。而MPChart就是这样一款图表库,它为开发者提供了丰富的功能和灵活性,使得…

从0到1浅析Redis服务器反弹Shell那些事

文章目录 前言Redis服务1.1 特点与应用1.2 安装与使用1.3 语法和配置1.4 未授权访问 反弹Shell2.1 Web服务写入Webshell2.2 Linux定时任务反弹shell2.3 /etc/profile.d->反弹shell2.4 写入ssh公钥登录服务器2.5 利用Redis主从复制RCE2.6 SSRF漏洞组合拳->RCE 总结 前言 …

ES6之解构赋值详解

✨ 专栏介绍 在现代Web开发中,JavaScript已经成为了不可或缺的一部分。它不仅可以为网页增加交互性和动态性,还可以在后端开发中使用Node.js构建高效的服务器端应用程序。作为一种灵活且易学的脚本语言,JavaScript具有广泛的应用场景&#x…

网络交换机端口管理会面临的问题

交换机端口管理是跟踪网络交换机及其端口连接详细信息的过程,在大型网络中,交换机端口管理过程通常使用自动化交换机端口管理工具执行。 通过网络交换机端口提供的完全控制和可见性使交换机端口管理工具在管理网络时必不可少,在网络中部署交…

【Java开发岗面试】八股文—Java基础集合多线程

声明: 背景:本人为24届双非硕校招生,已经完整经历了一次秋招,拿到了三个offer。本专题旨在分享自己的一些Java开发岗面试经验(主要是校招),包括我自己总结的八股文、算法、项目介绍、HR面和面试…

苹果电脑Dock栏优化软件 mac功能亮点

hyperdock mac是一款Dock优化软件,hyperdock支持使用窗口自动排列功能,您可以直接通过将窗口拖拉至屏幕上方来快速最大化至全屏,又或者拖动到左右来进行左分屏和右分屏。而且Dock优化软件还有一个特色便是对Dock的强大管理哪里能力&#xff0…