交叉编译 gmp

news2024/12/23 11:55:53

文章目录

  • 交叉编译 gmp
    • 1 概述
    • 2 源码下载
      • 2.1 官网下载
      • 2.2 使用 apt source 下载
    • 3 交叉编译
    • 4 关于 DESTDIR 的说明

交叉编译 gmp

1 概述

GMP (GNU Multiple Precision Arithmetic Library) 是一个用于任意精度计算设计的数学库,它的主要目标应用是密码学应用和研究、互联网安全应用、代数系统、计算代数研究等。

GMP 经过精心设计,无论是小操作数还是大操作数,都尽可能快,是一个高性能的数学库。自 1991 年首次发布以来,GMP 还在不断开发和维护,大约每年发布一次新版本。

从版本 6 开始,GMP 在双重许可证下发布(GNU LGPL v3 和 GNU GPL v2),这些许可证使库可以自由使用、共享和改进。

GMP 库提供了丰富的算术运算功能,包括整数运算、有理数运算和浮点运算,这些功能的实现都考虑到了提升性能和精度:

  • 整数运算:支持任意精度的整数运算,包括加法、减法、乘法、除法、模运算等。这对于处理大整数计算任务非常重要,如密码学中的大数模运算和幂运算。
  • 有理数运算:支持有理数的加减乘除等基本运算,以及有理数的约分和化简。
  • 浮点运算:虽然 GMP 主要以整数运算著称,但它也提供了对浮点数的高精度计算功能,支持任意精度的浮点数运算,包括加减乘除、取模和开平方等操作。

综上所述,GNU GMP 库是一个功能强大且高效的数学库,适用于处理大整数和高精度浮点数的计算任务。它的广泛应用领域和卓越性能使其成为科学研究、金融分析和密码学等领域的重要工具。

官方网址: https://gmplib.org/

在这里插入图片描述

2 源码下载

2.1 官网下载

在官方网址的入口处其实已经给出了下载链接,点击 Download 后面的版本链接 「gmp-6.3.0.tar.xz」 即可直接下载。在「Download the latest release of GMP」章节,显示了已发布的最新的版本信息及下载链接,选择合适的压缩格式的版本即可。如下图所示:

在这里插入图片描述

也可以使用 wget 命令直接下载:

wget https://gmplib.org/download/gmp/gmp-6.3.0.tar.xz

GMP 的历史版本可以在 https://gmplib.org/download/gmp/ 路径下找到。

GMP 的源码没有使用 Git 进行版本管理,它使用的是称为 Mercurial 的版本管理器,在 GMP Repository Usage 中有详细的介绍。

2.2 使用 apt source 下载

如果你使用的是 Ubuntu/Debian 系统,可以使用 apt source 指令进行源码下载。

mkdir libgmp
cd libgmp
apt source libgmp10

此处下载的是与 Ubuntu/Debian 系统版本相符的 GMP 源码,并非最新源码。

3 交叉编译

解压缩源码包,如果使用 apt source 下载回来的源码可以忽略这一步。

tar -xvf gmp-6.3.0.tar.xz 

解压缩源码包之后建议先阅读 README 与 INSTALL 文档,里面有关于编译的相关信息。

GMP 支持的是 GNU Build System 编译系统,简单理解就是 Unix 经典编译三步曲:

./configure
make
make install

在进行交叉编译前,首先创建一个环境配置文件 aarch64-environment-setup,配置最重要的交叉编译环境变量:

aarch64-environment-setup:

export TOOLCHAIN_ROOT=/opt/toolchains/aarch64--glibc--stable-2022.03-1
export BUILDSYSROOT=$TOOLCHAIN_ROOT/aarch64-buildroot-linux-gnu/sysroot
export PATH=$TOOLCHAIN_ROOT/bin:$PATH

export PREFIX=/usr

export CC="aarch64-linux-gcc --sysroot=$BUILDSYSROOT"
export CXX="aarch64-linux-g++ --sysroot=$BUILDSYSROOT"
export CPP="aarch64-linux-gcc -E --sysroot=$BUILDSYSROOT"
export LD="aarch64-linux-ld --sysroot=$BUILDSYSROOT"
export AR=aarch64-linux-ar
export AS=aarch64-linux-as
export NM=aarch64-linux-nm
export GDB=aarch64-linux-gdb
export OBJDUMP=aarch64-linux-objdump
export OBJCOPY=aarch64-linux-objcopy
export RANLIB=aarch64-linux-ranlib
export READELF=aarch64-linux-readelf
export STRIP=aarch64-linux-strip

export CONFIGURE_FLAGS="--host=aarch64-linux --build=x86_64-linux"

export PKG_CONFIG_SYSROOT_DIR=$BUILDSYSROOT
export PKG_CONFIG_PATH=$BUILDSYSROOT/usr/lib/pkgconfig:$BUILDSYSROOT/usr/share/pkgconfig

在本示例中,交叉编译工具位于 /opt/toolchains/aarch64--glibc--stable-2022.03-1/bin 目录下,将该目录配置到 PATH 环境变量,让系统能够正确搜索到。同时在配置 CCCXXCPPLD 环境变量时指定 --sysroot=<dir> 参数让交叉编译器搜索 dir 目录下的头文件与库文件,而不是 /usr/include/usr/lib

cd gmp-6.3.0
source aarch64-environment-setup
./configure --prefix=/usr $CONFIGURE_FLAGS
make
make DESTDIR=$BUILDSYSROOT install
  • 源码包解压后,使用 cd 命令切换到源码路径
  • 在源码目录下创建环境设置文件并调用 source 命令让环境变量生效
  • 执行源码包的 configure 文件,带上 --prefix 参数,指定安装路径。在配置文件中定义了临时的 CONFIGURE_FLAGS 来指定 --host--build 选项的值,具体的说明可以使用 ./configure --help 命令进行查阅
  • 执行 make 命令编译源码
  • 使用 DESTDIR 参数作为安装目标文件的前缀变量,后面带上你希望安装到的文件夹路径,详细介绍可以参考 DESTDIR 官方介绍。

最终你就可以在环境变量定义的 $BUILDSYSROOT 目录中找到交叉编译好的 libgmp 的头文件及库文件。

4 关于 DESTDIR 的说明

DESTDIR 主要用于在安装时重新定位软件包。以下是一个示例说明:

~/amhello-1.0 $ ./configure --prefix /usr
~/amhello-1.0 $ make
~/amhello-1.0 $ make DESTDIR=$HOME/inst install
~/amhello-1.0 $ cd ~/inst
~/inst $ tar zcvf ~/amhello-1.0-i686.tar.gz .
./
./usr/
./usr/bin/
./usr/bin/hello

通过以上操作,~/amhello-1.0-i686.tar.gz 已经准备好部署到任何机器的 / 根目录下了。

Good luck.

欢迎关注我的公众号:飞翔的小黄鸭
也许会发现不一样的风景

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

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

相关文章

ARP协议和DNS的工作原理

ARP协议 ARP协议的工作原理&#xff1a; 首先主机向自己的网络广播发送一个arp请求&#xff0c;请求报文包括目的端的ip地址和目的端的以太网地址。网络上的其他机器收到这个请求&#xff0c;但只有被请求的才会回应一个应答报文&#xff0c;报文中有自己的物理地址。 arp维护了…

【python因果推断库1】协方差分析(ANCOVA)用于处理前/后非等效组设计

目录 生成合成数据 分析 这是一个基于合成数据的初步示例。希望不久之后能用真实研究的数据进行更新。 在只有一次预处理测量和一次后处理测量的情况下&#xff0c;我们可以使用类似于协方差分析(ANCOVA)的方法来分析非等效组设计(NEGD)实验的数据。基本模型是&#xff1a; i指…

Vue(五). 安装脚手架及一些基本配置

文章目录 vue脚手架前言1. 安装脚手架1. 安装nvm2. 使用nvm安装node3. 配置node的全局路径和缓存路径4. 配置npm默认镜像源5. 安装脚手架全局路径和缓存测试 2. 文件结构及项目配置2.1 文件结构2.2 项目基本配置补充. vue项目安装依赖的一个问题 vue脚手架前言 脚手架也叫Vue …

敏捷需求管理,推动敏捷项目成功——Leangoo领歌敏捷工具

在敏捷项目管理中&#xff0c;需求管理是决定项目成功的关键环节。准确捕捉和高效管理需求&#xff0c;不仅能避免项目偏航&#xff0c;还能确保最终交付的产品与客户预期高度契合。Leangoo领歌敏捷工具&#xff0c;正是为此而生&#xff0c;助力团队轻松实现需求管理的每一步。…

vue中使用原生的video播放flv和mp4格式的视频

安装 npm i flv.js html <video v-if"videoId"controls id"videoElement"preload"metadata"controlslist"nodownload noremoteplayback" ><source :type"video/${videoType}" />您的浏览器不支持HTML5视频播…

Ansible一键安装Harbor服务

环境说明 企业内网环境,使用docker-compose的方式安装Harbor服务,需要先安装docker、docker-compose两个服务,将以二进制的方式安装docker和docker-compose,以适配各种安装环境。 docker版本:20.10.21,建议使用20.10以上的版本,低版本的会出现安装异常;Docker-compose版…

记一次ssh伪终端修改为shell

问题 用户ssh进行连接后&#xff0c;默认为伪终端。 解决办法&#xff0c;可以先拿到终端shell&#xff0c;查看用户是否为/bin/bash&#xff1a; 不是/bin/bash&#xff0c;使用如下命令进行修改&#xff1a; chsh -s /bin/bash rootservice sshd restart

在繁忙工作环境中提升开发效率:JetBrains IntelliJ IDEA 的应用

目录 前言1. IntelliJ IDEA 的核心功能1.1 智能代码补全&#xff1a;提升编码效率的利器1.2 深度代码分析&#xff1a;防患于未然1.3 代码重构&#xff1a;保持代码整洁有序 2. 提升团队协作与项目管理2.1 集成版本控制&#xff1a;高效的团队协作2.2 内置任务管理&#xff1a;…

开店到经营,分贝通帮助连锁经营企业这样省钱

如果说大企业的经营核心是做好主营业务的大生意,那么对于连锁经营企业而言,线下门店的一个个小生意,其实也隐藏着“大学问”。费用支出方面,如何从细节处节流,让资金流呈现更良性循环,是连锁经营行业的重要课题。 1、开店前:选址BD全国跑,筐筐发票财务恼 2、日常经营:费用类目…

Qt:玩转QPainter后转之时钟

前言 简单了解了QPainter之后当然是要找两个例子练练手啦。 正文 先看效果图 在绘制之前我们要先构思好自己要绘制的对象可以分成几部分&#xff0c;比如我要绘制时钟的话&#xff0c;我可以分成&#xff1a;外边框(圆环或者圆)&#xff0c;圆形背景&#xff0c;刻度&…

MySQL 使用C语言链接

mysql的基础&#xff0c;我们之前已经学过&#xff0c;后面我们只关心使用 要使用C语言连接mysql&#xff0c;需要使用mysql官网提供的库&#xff0c;大家可以去官网下载 我们使用C接口库来进行连接 要正确使用&#xff0c;我们需要做一些准备工作&#xff1a; 保证mysql服务有…

【WPF】WPF学习之【二】布局学习

WPF布局学习 常用布局Grid网格布局StackPanel 布局CanvasDockPanel布局WrapPanel布局 常用布局 1、StackPanel: 学习如何使用StackPanel进行垂直和水平布局。 2、Grid: 掌握Grid的网格布局技术。 3、Canvas: 了解Canvas的绝对定位布局。 4、DockPanel: 学习DockPanel的停靠…

【加密社】马后炮视角来看以太坊二层战略

阅读正文前先给大家普及下知识&#xff0c;以下文章中提到的 Blobs指的是&#xff1a;"Blob Carriers" 或 "Calldata Blobs" 这是在以太坊网络中用于携带数据的一种方式&#xff0c;尤其是在涉及Rollup&#xff08;如Optimistic Rollup和ZK-Rollup&#xf…

数据结构-复杂度

数据结构&#xff1a;在内存中管理数据&#xff0c;内存速度快&#xff0c;带电存储 数据库&#xff1a;在磁盘中管理数据&#xff0c;磁盘速度慢&#xff0c;不带电存储 时间复杂度 大O的渐进表示法&#xff1a;忽略常数、系数&#xff0c;保留最高次数项 如果只有常数&am…

PMC如何建立有效的监控系统来及时发现生产计划的偏离?

在制造业的复杂生态中&#xff0c;PMC&#xff08;生产与物料控制&#xff09;扮演着至关重要的角色。它不仅是连接销售、生产、采购与库存管理的桥梁&#xff0c;更是确保生产活动高效、有序进行的核心。随着市场需求的快速变化和生产环境的日益复杂&#xff0c;建立一套有效的…

python开发--模板语句

这部分是导航栏部分的代码&#xff0c;由于导航栏在各个页面都需要用&#xff0c;为了提高代码复用率将导航栏部分作为一个模板。 在下面代码图中&#xff0c;红色框部分相当于一个插槽&#xff0c;其他页面&#xff0c;如部门列表、用户列表等将在这个位置展示。 这部分是用户…

docker部署project-exam-system项目(haproxy代理nginx)

1、概述&#xff1a; 即nmt服务&#xff0c;涉及到的服务有&#xff1a;nginx、mysql、tomcat 2、具体配置&#xff1a;(前提&#xff1a;先停掉然后之前运行的容器) 1&#xff09;先创建三个nginx容器 # 端⼝不能映射80 [rootdocker ~]# docker run -itd -v /root/pes/we…

Echarts中国地图省市区县三级联动

NodeV14.20.0安装 # 历史版本Node下载地址 https://nodejs.org/en/download/prebuilt-installer# NodeV14.20.0配置与部署 https://nodejs.org/dist/v14.20.0/node-v14.20.0-x64.msi构建默认Vue3工程目录 npm install -g vue/cli --registryhttps://registry.npm.taobao.org …

剪映剪辑影视视频字幕声音批量自动对齐教程

一款智能软件&#xff0c;用它结合剪映或CapCut 你就可以快速将一个视频翻译为另一种语言&#xff0c;非常适合做TikTok中视频的用户&#xff0c;无论是英语区法语区还是日语区&#xff0c;这款名为谷哥剪映助手的软件都能成倍提升你的剪辑效率。 让我来给大家介绍它的使用方法…

结合Wireshark抓包分析,沉浸式体验HTTP请求的一次完整交互过程

HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本传输协议&#xff09;是用于传输超文本信息的协议&#xff0c;它是互联网上应用最为广泛的一种网络协议。了解完整的HTTP请求过程有助于我们更深层次的去分析问题&#xff08;尤其是网络安全问题&#xff09;&am…