CUnit在ARM平台上的离线搭建(让CUnit编译安装成功之后的可执行文件.so变成ARM下的—ARM aarch64)(实用篇)
- 前言:
- 1 CUint-2.1-3.tar.bz2压缩安装包下载并解压
- 2 进入CUint-2.1-3目录并且通过指令./bootstrap*产生configure *执行文件
- 3 执行./configure*命令
- 4 make编译
- 5 make install 安装
前言:
在X86架构上的Linux操作系统上面进行cmake编译(CycloneDDS的C版本),在进行testing的时候需要依赖CUnit单元测试工具,之前已经成功安装了,可以参考文章:
X86架构的Linux(Ubuntu版本)上离线安装CUnit来解决Could not find CUnit(missing:CUNIT_LIBRARY)问题
这中方法中打开Cunit目录,经过make 、make install等步骤生成的可执行文件,通过file命令可以看到其格式为:。如下图所示:

它还是属于X86架构下,我们要在ARM架构上cmake编译C语言版本的CycloneDDS代码,所以需要ARM下的CUnit执行文件,最终生成之后的结果应该是如下图所示:

下面进行CUnit单元测试工具在ARM架构Linux操作系统上的安装
1 CUint-2.1-3.tar.bz2压缩安装包下载并解压
下载方法已经在下面文章中给出,品一下:
X86架构的Linux(Ubuntu版本)上离线安装CUnit来解决Could not find CUnit(missing:CUNIT_LIBRARY)问题
下载完成之后,如果需要将文件包从Windows传输到Linux上面请参考下面文章,看过的都说好:
Windows与Linux系统实现文件互传(通俗易懂)
下载成功之后的文件名为:CUint-2.1-3.tar.bz2
使用命令解压:tar -jxvf CUint-2.1-3.tar.bz2
解压后的文件夹名称为:CUint-2.1-3
如下图所示我将解压包放在了/home/ubuntu/Documents/ARM下面,此时目录下面包含以下文件包:

2 进入CUint-2.1-3目录并且通过指令./bootstrap*产生configure *执行文件
上一步中我们解压安装包,进入CUint-2.1-3目录之后通过ll命令看到
如下图所示:

我们通过命令打开vim ./Makefile文件,如下图所示:

Makefile文件里面很多东西都是默认的,这样的话make编译出来的库文件都是默认Linux架构下的(X86),所以为了构建出ARM架构下的Cunit,需要改动Makefile文件,但是Makefile文件里面需要连环改动的地方太多,不好下手,所以直接使用命令行的方式来做。
使用如下命令产生configure *执行文件:
./bootstrap --prefix=/home/ubuntu/Documents/install_ARM/ CC=/usr/local/arm/aarch64--glibc--stable-2022.03-1/bin/aarch64-linux-gcc CXX=/usr/local/arm/aarch64--glibc--stable-2022.03-1/bin/aarch64-linux-g++ --host=arm-linux
参数解释:
1、--prefix=后面所跟的就是你所选择的安装路径
这里我选的是:/home/ubuntu/Documents/install_ARM/
2、CC后面跟的就是我们ARM架构下的C语言编译器
CC=/usr/local/arm/aarch64--glibc--stable-2022.03-1/bin/aarch64-linux-gcc
上面的地址是Linux上交叉编译工具链的解压安装地址,c编译器使用的是工具链下bin目录下面的aarch64-linux-gcc
3、CXX后面跟的就是我们ARM架构下的C++的编译器
CXX=/usr/local/arm/aarch64--glibc--stable-2022.03-1/bin/aarch64-linux-g++
同理,C++编译器使用的是工具链下bin目录下面的aarch64-linux-g++
4、--host是指定软件运行的系统平台,如果没有指定,将会自动去搜索
--host=arm-linux表示软件系统平台是ARM
上述指令执行完成以后显示如下图所示:
产生了configure文件

3 执行./configure*命令
同上一步,configure*配置默认的是gcc编译器,我们现在是在ARM平台上进行编译,所以需要更改编译器
指令如下:
./configure --prefix=/home/ubuntu/Documents/install_ARM/ CC=/usr/local/arm/aarch64--glibc--stable-2022.03-1/bin/aarch64-linux-gcc CXX=/usr/local/arm/aarch64--glibc--stable-2022.03-1/bin/aarch64-linux-g++ --host=arm-linux
此指令的解释与第二步中相同,就不赘述啦
执行结果如下图所示:

4 make编译
linux终端输入:make
如下图所示:


5 make install 安装

安装完成之后,在安装路径下打开CUnit库文件查看文件类型属性
输入:file 文件名
显示结果如下图所示,说明ARM架构上CUnit搭建完成

完结撒花~~~~
相关文章:
CUnit在ARM平台上的离线搭建(让CUnit编译安装成功之后的可执行文件.so变成ARM下的—ARM aarch64)(实用篇)
前言:1 CUint-2.1-3.tar.bz2压缩安装包下载并解压2 进入CUint-2.1-3目录并且通过指令./bootstrap*产生configure *执行文件3 执行./configure*命令4 make编译5 make install 安装 前言: 在X86架构上的Linux操作系统上面进行cmake编译(Cyclon…...
整数序列(山东大学考研机试题)
水仙花数(中南考研机试题) 链接:3644. 水仙花数 - AcWing题库 /* 暴力枚举罢了 */ #include<iostream> using namespace std; const int N1e3100; int book[N]; int pow3(int k){return k*k*k; } int main() {int m,n;for(int i100;i<999;i){int t1,t2,t3;t1 i%10;t…...
k8s集群安装
目录 一 主机准备 1.1 设备配置 ⚠️注意1 ⚠️注意2 1.2 环境准备 1.3docker安装 二 安装kubeadm、kubectl、kubelet 2.1 添加镜像源 2.2 安装 三 master节点部署 四 node节点加入集群 五 CNI网络插件calico 六 其他节点使用kubectl 1.拷贝文件 2.添加到环境变量…...
【webrtc】ProcessThreadAttached
RegisterModule 调用所在的线程指针传递给ProcessThreadAttached ProcessThreadAttached 调用不是在worker thread 而是在 registers/deregister 这个module或者 start stop 这个module的时候 ** ** pacedsender是一个moudle -实现了...
Orange pi3初调试
因为树莓派沦为理财产品1年前出手殆尽后,现在唯一一个B性能不足一直没动力调试,沦为吃灰工具。 偶然之间多多给推了个orange产品预售,看了下pi3的参数,这不和赚了差价的3B一个性能吗?果断定了个预售款,在差…...
手机里的视频怎么转换成MP4格式?简单的转换方法分享
MP4格式是一种广泛使用的视频格式,几乎所有设备和操作系统都支持MP4格式的视频播放。无论是使用 iPhone、iPad、安卓手机、电视等各种设备,都可以播放 MP4 格式的视频。这种广泛的兼容性使得 MP4 成为一种非常方便的视频格式,我们可以随时随地…...
Matlab数学建模实战——(Lokta-Volterra掠食者-猎物方程)
1.题目 问题1 该数学建模的第一问和第二问主要是用Matlab求解微分方程组,直接编程即可。 求解 Step1改写 y(1)ry(2)f Step2得y的导数 y(1).2y(1)-ay(1)*y(2)y(2).-y(2)a*y(1)*y(2) Step3编程 clear; a0.01; F(t,y)[2*y(1)-a*y(1)*y(2);-y(2)a*y(1)*y(2)]; […...
windows下软件推荐
起源与目的 选择任何一个系统作为主力系统都是要好好考虑的。 在去年新买了一块1T的SSD后,就好好想了想这个问题。 Arch Linux, Ubuntu, Windows, macOS, deepin都是在考虑范围的。 不过我考虑到使用体验,最终还是选择了windows。 不选择macOS主要是不喜…...
SQlite数据库
SQlite数据库 1.SQLite简介 轻量化,易用的嵌入式数据库,用于设备端的数据管理,可以理解成单点的数据库。传统服务器型数据库用于管理多端设备,更加复杂 SQLite是一个无服务器的数据库,是自包含的。这也称为嵌入式数…...
Doris-问题
1.启动BE报错 设置系统最大打开文件句柄数(注意这里的*不要去掉) 重启生效!!!重启生效!!!重启生效!!! sudo vim /etc/security/limits.conf * soft nofile 65536 * hard nofile 65536 * soft nproc 131072 * hard nproc 131072 重启生效...
什么是OA系统,什么是工单系统,有啥区别?
一、OA系统与工单系统介绍 1、什么是OA系统 OA系统全称为Office Automation,即办公自动化系统。它是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、流程管理、知识管理(档案和业务管理)、协同办公…...
DDoS攻击:网络安全的威胁
什么是DDoS攻击? DDoS(分布式拒绝服务)攻击是一种恶意网络攻击,目的是通过发送大量的请求或占用目标系统的资源,使其无法正常运行。在DDoS攻击中,攻击者使用分布在多个地理位置的多台计算机(也称…...
docker版jxTMS使用指南:device的调整
本文讲解4.2版jxTMS对device的调整,整个系列的文章请查看:docker版jxTMS使用指南:4.2版升级内容 docker版本的使用,请参考docker版jxTMS使用指南 4.0版jxTMS的说明,请查看:4.0版升级内容 为了适应拉取模…...
AI智能语音机器人的功能和作用都有哪些?
智能语音机器人是一种能够使用自然语言处理技术和人工智能算法,通过声音与用户进行交互的机器人。它可以回答用户提出的问题、处理用户的投诉、提供产品或服务的相关信息等等。 实现一个智能语音机器人需要涉及多个技术领域,包括自然语言处理、语音识别…...
vue3+vite+Ts 基于Antv/x6 绘制流程图
需求效果: 需求: 实现一个流程图,双击可对相应的组件进行一些功能操作; 工具栈: 这里使用antv/x6, 基于vue3vitets进行开发 官网地址: https://x6.antv.antgroup.com/examples/showcase/pra…...
sys V 进程间通信之消息队列
note msgget获取内核消息队列实例 msgctl可以删除内核消息队列实例 msgsnd\msgrcv函数注意struct msgbuf字段的填充 code #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> #include <unistd.h> #include &l…...
Android 报错,闪退(错误)日志保存到手机内存中,以文本文件的形式保存
1.直接贴代码 import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.os.Environment; import android.util.Log;import com.nuotu.atmBookClient.App;import java.io.File; i…...
flutter聊天界面-加号【➕】更多展开相机、相册等操作Panel
flutter聊天界面-加号【➕】更多展开相机、相册等操作Panel 在之前实现了flutter聊天界面的自定义表情的展示,这里记录一下更多操作展开的相机、相册等操作功能实现。 一、查看效果 更多操作展开的相机、相册等操作功能实现。 二、代码实现 展开的操作按钮可能比…...
浅析泵站自动化技术的发展趋势
摘要:基于泵站对我国水利及水务事业的重要性,文章以城市供水行业大型泵站为对象,分析了泵站自动化技术 发展现状,结合泵站自动化技术的发展需求,从管控一体化、系统自诊断、运行信息实时化管理等方面展望了泵 站自动化…...
5.4.1 虚拟专用网VPN
5.4.1 虚拟专用网VPN 我们已经学习了因特网的路由协议(5.3.1 因特网的路由协议(一)、5.3.2 因特网的路由协议(二)基于距离向量算法的RIP协议、5.3.3 因特网的路由协议(三)OSPF协议、5.3.4 因特…...
基于算法竞赛的c++编程(28)结构体的进阶应用
结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
k8s从入门到放弃之Ingress七层负载
k8s从入门到放弃之Ingress七层负载 在Kubernetes(简称K8s)中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
