使用Clion在ubuntu上进行交叉编译,并在Linux上远程编译五子棋
目录
1.工具以及概念介绍
(1)Clion软件简介
(2)交叉编译
(3)远程编译
2.操作原理
3.详细操作步骤
(1)配置Clion与虚拟机ubuntu的ssh连接
CLion远程开发Ubuntu,并显示helloworld文字框
(2)宿主机环境搭建
(3)编译出现 File in wrong format问题
(4)开发板环境配置搭建
(5)挂载出现错误
出错原因:
1.电脑与开发板之间以太网没有连接
2..电脑PC端的WiFi没有禁止,电脑PC端的以太网没有设定为192.168......IPv4的形式
3.虚拟机与PC端的ip地址没有同步
4.虚拟机没有设置为桥接模式
5.虚拟机、宿主机、PC端以太网没有处于同一网段上。
192.168.12.1与192.168.12.2与192.168.12.200都是同一网段
6.在宿主机环境搭建的第四步
编辑 NFS导出配置文件/etc/exports , 添加希望共享的目录中,GEC6818 的 IP地址仍然为 192 . 168 . 1 . 100,要进行改变
问题解决
1.配置windows11 以太网默认ip为192.168.......
2.设定开发板、虚拟机ip地址与桥接模式
3.NFS权限不够
总结:
使用Clion通过ssh在ubuntu上进行交叉编译还有远程编译对于一名嵌入式工程师来说,是我们学习Linux不可多得的神兵利器。利用Clion强大的自动补齐,我们可以节省非常多的查找函数的时间,此外Clion还支持多项目打开的功能,可以在一个文件夹下创建多个项目,这无疑是非常哇塞的(只有玩过Qt才知道这有多么强大~~)。而且,Clion还可以通过SSH进行连接,还有Cmake进行交叉编译,交叉编译的教程我以前发布过。
综上所述,我们才要掌握这一能力,学会使用Clion进行交叉和远程编译!
1.工具以及概念介绍
(1)Clion软件简介
CLion 是 JetBrains 开发的一款跨平台集成开发环境(IDE),主要用于 C 和 C++ 编程。它在开发中提供了许多强大的功能,以帮助程序员更加高效地编写和管理代码。他不仅能提供提供代码补全、快速导航和实时错误检测,帮助开发者提高编程效率;还能使用 CMake 作为项目构建系统,可以轻松管理项目依赖,支持多种构建配置。
特别是对Cmake的支持,使Clion能进行多项目编译,而且可以进行跨平台编译,比如用Clion在ubuntu上进行QT的交叉编译,就是CMake发挥了作用。
综上:CLion 适用于个人项目、商业开发和大型团队合作,特别适合需要进行 C/C++ 开发的开发者和工程师。如果你对嵌入式系统或系统软件开发感兴趣,CLion 也是一个非常好的选择。
(2)交叉编译
交叉编译是一种编程技术,它允许在一种平台上(通常是性能更强的开发环境)编译生成适用于另一种平台(通常是硬件资源有限的目标设备)的程序。简单来说,就是在一个系统上为另一个系统创建可执行文件。
我们这里使用交叉编译,是在ubuntu虚拟机上编译出可以在开发板上跑的程序,它所使用的编译器是Qt,他是跨平台的,使用的工具是Clion中的CMake。
通过交叉编译,开发者能够在开发环境中完成大部分工作,而无需直接在目标设备上进行编译,这样大大提高了开发效率。
(3)远程编译
远程编译是一种编程技术,允许开发者在本地机器上编写和构建代码,但实际的编译过程在远程服务器或其他计算机上进行。这种方法通常用于需要大量计算资源或特定环境的应用开发,尤其在大型项目或跨平台开发中非常有用。
对于开发板来说,远程编译可以有效的延长开发板的使用寿命(可能不准~听老师说的),由于对于部分Linux而言,其性能有限,不能直接运行编译器,所以远程编译也就孕育而生,而会不会远程编译对于嵌入式程序员而言也是核心竞争力的一种象征!
2.操作原理
我们利用Clion搭建好于虚拟机的ssh连接,在Clion的终端里登录虚拟机,再将虚拟机当做宿主机(我使用的虚拟机仅仅安装了必要的开发工具,比如arm-linux-gcc),通过交叉编译,使用Clion自带的CMake配置arm开发板所要用的gcc,完成在ubuntu虚拟机中arm-gcc项目的编译,通过nfs共享宿主机上的共享文件夹,远程运行程序,即可在开发板上远程编译,运行项目。
特别指出:要能支持qt(arm版本的)。因此最重要的两件事:要启动nfs服务,安装cmake(因为ubuntu上预装的linux版本的Ot creator共享版并不是使用的cmake工具,而是使用的qmake,qt公司自己的)。
3.详细操作步骤
(1)配置Clion与虚拟机ubuntu的ssh连接
过程如下:
CLion远程开发Ubuntu,并显示helloworld文字框
(2)宿主机环境搭建
1.打开终端
2.使用文本编辑器 (如 nano 或vim) 打开 sources. list 文件。 这里以 nano 为例 :
sudo nano /etc/apt/sources.list
3.在文件的末尾添加您提供的源。 您可以直接复制并粘贴以下内容:
deb Index of /ubuntu/ trusty main restricted universe multiverse
deb Index of /ubuntu/ trusty-updates main restricted universe multiverse
deb Index of /ubuntu/ trusty-security main restricted universe multiverse
这里是使用了中科大的镜像源。
4.保存并退出编辑器。 在 nano 中 , 您可以按ctrl + O 保存文件 , 然后按 ctrl + X退出。
5.更新软件包列表以使更改生效:
sudo apt-get update
要在 ubuntu 14. 04上为 GEC6818 嵌入式开发板(本次使用的开发板)建立 NFS (网络文件系统) 服务 , 可以按照以下步骤进行操作:
1 . 安装 NFS服务器首先需要安装 NFS 服务器软件包。 打开终端并运行以下命令:
sudo apt-get update
sudo apt-get install nfs-kernel-server
2. 创建共享目录选择一个目录作为 NFS共享目录。 例如 , 可以在"," 目录下创建一个名为 /nfs 的目录:
sudo mkdir /nfs
3. 设置目录权限根据需要设置共享目录的权限。 例如 , 可以将权限设置为所有用户可读写:
sudo chmod 777 /nfs
4. 配置 NFS 导出
编辑 NFS导出配置文件/etc/exports , 添加希望共享的目录。 使用文本编辑器打开文件:
sudo nano /etc/exports
在文件末尾添加以下行 (假设 GEC6818 的 IP地址为 192 . 168 . 1 . 100 , 请根据实际情况修 改) :
/nfs 192.168.1.100(rw,sync,no_subtree_check)
rw: 允许读写。
sync: 同步写入。
no subtree check: 不检查子目录。
注意: 保存并退出操作: 在 nano 中 , 按ctrl + O保存文件 , 然后按 ctrl + X退出。
5 .导出共享目录
运行以下命令以使更改生效:
sudo exportfs -a
6 .启动 NFS 服务确保 NFS服务正在运行:
sudo service nfs-kernel-server restart
sudo service nfs-kernel-server status
7 . 配置防火墙 (如果适用) 如果您使用防火墙 , 请确保允许 NFS流量。 可以使用以下命令允许 NFS 端口 :
sudo ufw allow from 192.168.1.100 to any port nfs
8 .在 GEC6818 开发板上挂载 NFS共享
mount -t nfs -o nolock 192.168.20.108:/nfs /mnt
通过以上步骤 , 能够成功启动 NFS 服务并共享目录 , 这是我们搭建远程运行环境的第一步。
接下来我们要安装cmake , 这个比较简单:
sudo apt-get update
sudo apt-get install cmake
这个两条命令能成功安装cmake2 . 12的版本
接下来我们要启动ssh服务 , 首先还是要安装openssH服务器
1 、安装 openssH 服务器如果尚未安装 openssH 服务器 , 您可以使用以下命令进行安装:
sudo apt-get update
sudo apt-get install openssh-server
2、 启动 SSH 服务安装完成后 , 您可以使用以下命令启动 SSH 服务:
sudo service ssh start
3、 检查 SSH 服务状态您可以使用以下命令检查SSH 服务的状态:
sudo service ssh status
4、配置防火墙 (如果适用) 如果您使用防火墙 , 请确保允许SSH 流量。可以使用以下命令允许SSH 端口 (默认是22) :
sudo ufw allow ssh
5、 验证 SSH 连接
我之前第一步的操作完成以后,ssh连接时已经连接好了的。
6、 确认Cmake与gcc还有Debuggen的配置
一定要是已连接宿主机中有,且它与编译的文件的格式息息相关,若gcc为minigui,则只能在虚拟机上运行,不能在开发板上运行,如果是arm-gcc,则只能在开发板上运行,不能在虚拟机上运行,它与运行环境中的库息息相关。
7、 在Clion中编译项目
特别注意 , 你的cmakeLists.txt应该参考下面的形式。
cmake_minimum_required(VERSION 2.8)
project(FIve)set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)set(CMAKE_PREFIX_PATH "/opt/qtlib560_base") # 或者使用 /opt/qtlib560_base
# Qt
find_package(Qt5 COMPONENTSCoreGuiWidgetsREQUIRED)
#
include_directories(/opt/qtlib560_base/include)# 或者使用 /opt/qtlib560_base/include
link_directories(/opt/qtlib560_base/qtarm560/lib)# 或者使用 /opt/qtlib560_base/includeqt5_add_resources(QT_RESOURCES FiveChess/resources.qrc)
add_executable(FiveChessMain ${QT_RESOURCES} FiveChess/main.cppFiveChess/fivechesswidget.cpp FiveChess/fivechesswidget.h )
target_link_libraries(FiveChessMainQt5::CoreQt5::GuiQt5::Widgets
)
进入Clion与虚拟机中映射的文件夹,将文件部署后,进行ls,即可看到Clion中的文件已经全部部署到虚拟机中的映射地址里。
在cmake ./与make之后,正常不会出现error,之后ls,即可看到绿色可执行文件。
(部署,进入映射地址,cmake ./与make都在第一步的连接里有所讲述这里不多赘述)
(3)编译出现 File in wrong format问题
该英文的翻译是文件格式错误,是由于所链接的库的格式与要编译的文件格式不匹配所导致的。
下面是错误原因:
1、CMakeList.txt文件中没有按照我给的标准来,有函数错误或路径错误。比如
link_directories(/opt/qtlib560_base/qtarm560/lib)代码出现错误
2、在Toolchains中C++ Compiler等gcc没有按照我给出的环境配置,或配置错误。
下面是解决方法:
1、检测CmakeList.txt,寻找相应的库,查看相应资料,以防止连接的库与可执行文件不匹配。
2、检测gcc配置
3、更换项目文件地址(比如将放在F盘的项目换到D盘,在重复操作编译,神奇的是,我周围很多同学都是这样解决的)
(4)开发板环境配置搭建
连接开发板串口:
下面用SecureCRT软件通过serial串口与开发板连接
SecureCRT软件连接如下,下载后直接打开
通过网盘分享的文件:05_CRT
链接: https://pan.baidu.com/s/1Vt18AY5OSykrUPvDtxXA6A 提取码: ma56
特别注意,使用SecureCRT时,如果不上,
1.检查串口线是否连接成功
2.将波特率调到9600连接成功后断开,再将波特率调制115200后建立连接
步骤如下:
执行程序以后,即可看到程序在开发板上执行。
(5)挂载出现错误
出错原因:
1.电脑与开发板之间以太网没有连接
2..电脑PC端的WiFi没有禁止,电脑PC端的以太网没有设定为192.168......IPv4的形式
3.虚拟机与PC端的ip地址没有同步
4.虚拟机没有设置为桥接模式
5.虚拟机、宿主机、PC端以太网没有处于同一网段上。
192.168.12.1与192.168.12.2与192.168.12.200都是同一网段
6.在宿主机环境搭建的第四步
编辑 NFS导出配置文件/etc/exports , 添加希望共享的目录中,GEC6818 的 IP地址仍然为 192 . 168 . 1 . 100,要进行改变
问题解决
1.配置windows11 以太网默认ip为192.168.......
(1)搜索控制面板
(2)点击查看网络状态和任务
(3)右键以太网,进入状态
(4)点击属性后,双击下面蓝色选项
即可设定制定ip地址
2.设定开发板、虚拟机ip地址与桥接模式
(1)桥接模式在虚拟机设置中可以更改
(2)更改虚拟机IP地址
打开虚拟机终端,敲入下列命令并执行
sudo ifconfig eth0 192.168.xxx.xxx
输入root密码(开机密码)即可更改IP地址
备注eth0是有线网络的意思
(3)更改开发板IP地址
在SecureCRT连接后,敲入下列命令并执行
ifconfig eth0 192.168.xxx.xxx
注意他们的ip地址网段要一样
(4)验证虚拟机与开发板是否连接
在开发板ping 宿主机的IP地址
或在宿主机ping开发板的ip地址
指令如:ping 192.168.54.152
3.NFS权限不够
重复宿主机配置中步骤4的操作,再重行进行mount挂载
总结:
嵌入式这一行,如我老师所说,重要的是胆大心细,要编程习惯好,单单将过程做一遍是没有用的,更何况把答案给人抄都有可能抄不来,上面的项目光光是配置我就配置了几天,总是出现这样或那样的问题,更何况这仅仅是配置。但难也有难的好处,没有门槛我还不来呢,嘿嘿。
希望我的文章可以帮助到大家,也希望大家能越学越好!
相关文章:

使用Clion在ubuntu上进行交叉编译,并在Linux上远程编译五子棋
目录 1.工具以及概念介绍 (1)Clion软件简介 (2)交叉编译 (3)远程编译 2.操作原理 3.详细操作步骤 (1)配置Clion与虚拟机ubuntu的ssh连接 CLion远程开发Ubuntu,并显…...

《QDebug 2024年12月》
一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.QQuickPaintedItem 或者 QQuickItem 绘制的图片 dpi 缩放后模糊 启用 Qt 自带的缩放后,界面会跟随系统设置的 dpi 进行放大缩小: #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)QCoreApplicat…...

3---杭州工作三年半
2021-07-06来杭——2025-01-01元旦 1滨江2021-07-06——2022-11-25(一年零四个月) 2下沙2023-01-01——2023-04-27(五个月) 3苏州2023-06-07——2023-06-27(一个月)厦门2023-06-29——2023-07-06ÿ…...

从2024看2025前端发展趋势
前言 又至年关,回顾整个2024年,前端行业仍旧百废待兴,IT业界同样也未见有所起色,AI风潮也从狂热兴奋逐步走向了冷静稳定阶段,造成此形势感观并非单一行业或者某一企业之特例,实为政经等综合影响之结果。因…...

网络渗透测试实验三:SQL注入
1.实验目的和要求 实验目的:了解SQL注入的基本原理;掌握PHP脚本访问MySQL数据库的基本方法;掌握程序设计中避免出现SQL注入漏洞的基本方法;掌握网站配置。 系统环境:Kali Linux 2、Windows Server 网络环境:交换网络结构 实验工具: SqlMAP;DVWA 2.实验步骤 实验目…...

ElasticSearch7.8快速入门
文章目录 1.基本概念1.数据格式2.倒排索引 2.HTTP使用1.创建索引(相当于创建数据库)2.索引-查询 & 删除1.查询索引2.查询所有索引3.删除索引 3.创建文档1.创建文档(不指定id)2.创建文档(指定id) 4.文档…...
【YashanDB知识库】hive初始化崖山报错YAS-04209
本文内容来自YashanDB官网,原文内容请见 https://www.yashandb.com/newsinfo/7849008.html?templateId1718516 【问题分类】功能使用 【关键字】hadoop,hive,YAS-02058 【问题描述】hive初始化崖山报错: 0: jdbc:yasdb://192…...

2024年度总结:保持正念 延迟满足
总结: 时光荏苒,很快就到了年底,2024年也就悄悄的过去了,回顾这一年,有很多的感触,在此做一个总结,留下自己的脚印 CTF: 要总结的第一件事那当然是CTF,回顾这一年&#…...

VScode SSH 错误:Got bad result from install script 解決
之前vscode好好的,某天突然连接报错如下 尝试1. 服务器没有断开,ssh可以正常连接 2. 用管理员权限运行vscode,无效 3. 删除服务器上的~/.vscode-server 文件夹,无效 试过很多后,原来很可能是前一天anaconda卸载导致注册表项 步…...

Logo设计免费生成器工具:轻松创建独特标志
在当今的商业世界中,一个独特且引人注目的Logo是任何企业或品牌的身份象征。它不仅代表了公司的形象,还传达了公司的价值观和使命。然而,对于许多初创企业或小型企业来说,聘请专业设计师来设计一个Logo可能是一笔不小的开销。这时…...
[算法] [leetcode-349] 两个数组的交集
349 两个数组的交集 给定两个数组 nums1 和 nums2 ,返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1: 输入:nums1 [1,2,2,1], nums2 [2,2] 输出:[2] 示例 2: …...

Type c系列接口驱动电路·内置供电驱动电路使用USB2.0驱动电路!!!
目录 前言 Type c常见封装类型 Type c引脚功能详解 Type c常见驱动电路详解 Type c数据手册 编写不易,仅供学习,请勿搬运,感谢理解 常见元器件驱动电路文章专栏连接 LM7805系列降压芯片驱动电路…...
第7章 程序流程控制 - 条件分支
汇编语言是一种低级编程语言,它与特定计算机架构的机器码有着直接对应关系。条件分支是程序流程控制的一部分,允许根据某些条件来决定执行哪一段代码。在汇编中,这通常通过比较指令和跳转指令来实现。 以下是一些经典的汇编语言源代码示例&a…...

Edge如何获得纯净的启动界面
启动Edge会出现快速链接,推广链接,网站导航,显示小组件,显示信息提要,背景 ●复杂页面 ●精简页面 点击页面设置按钮 关闭快速链接 关闭网站导航 关闭小组件 关闭信息提要 关闭背景 关闭天气提示 精简页面看起来十分舒…...

gitlab的搭建及使用
1、环境准备 服务器准备 CentOS Linux release 7.9.2009 (Core),内存至少4G。 修改主机名和配置ip地址 hostnamectl set-hostname <hostname> 关闭主机的防火墙 # 关闭防火墙 systemctl stop firewalld #临时关闭防火墙 systemctl disable firewalld …...

如何逐步操作vCenter修改DNS服务器?
在vSphere 7中有一个新功能,它允许管理员更改vCenter Server Appliance的FQDN和IP。因此本文将介绍如何轻松让vCenter修改DNS服务器。 vCenter修改DNS以及修改vCenter IP地址 与在部署 vCenter Server Appliance 后,您可以根据需要修改其 DNS 设置和 IP…...

XIAO ESP32 S3网络摄像头——2视频获取
本文主要是使用XIAO Esp32 S3制作网络摄像头的第2步,获取摄像头图像。 1、效果如下: 2、所需硬件 3、代码实现 3.1硬件代码: #include "WiFi.h" #include "WiFiClient.h" #include "esp_camera.h" #include "camera_pins.h"// 设…...

使用JMeter对Linux生产服务器进行压力测试
安装 JMeter wget https://downloads.apache.org/jmeter/binaries/apache-jmeter-5.4.1.tgz tar -xzf apache-jmeter-5.4.1.tgz cd apache-jmeter-5.4.1创建 JMeter 脚本 设置中文 选择Options—>Choose Language—>选择其他语言(例如:Chinese&am…...
spring boot 异步线程池的使用
创建Spring Boot项目 首先,你需要创建一个Spring Boot项目。你可以使用Spring Initializr(https://start.spring.io/)来快速生成项目结构。 添加异步支持依赖 在你的pom.xml文件中,确保你已经添加了Spring Boot的starter依赖&…...

风力涡轮机缺陷检测数据集,86.6%准确识别率,11921张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注
风力涡轮机缺陷检测数据集,86.6%准确识别率,11921张图片,支持yolo,PASICAL VOC XML,COCO JSON格式的标注 数据集下载 yolov11: https://download.csdn.net/download/pbymw8iwm/90206849 yolov…...

国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
【Linux】C语言执行shell指令
在C语言中执行Shell指令 在C语言中,有几种方法可以执行Shell指令: 1. 使用system()函数 这是最简单的方法,包含在stdlib.h头文件中: #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...

用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...