使用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 COMPONENTS
        Core
        Gui
        Widgets
        REQUIRED)
#
include_directories(/opt/qtlib560_base/include)# 或者使用 /opt/qtlib560_base/include
link_directories(/opt/qtlib560_base/qtarm560/lib)# 或者使用 /opt/qtlib560_base/include

qt5_add_resources(QT_RESOURCES FiveChess/resources.qrc)
add_executable(FiveChessMain ${QT_RESOURCES} FiveChess/main.cpp
        FiveChess/fivechesswidget.cpp FiveChess/fivechesswidget.h )
target_link_libraries(FiveChessMain
        Qt5::Core
        Qt5::Gui
        Qt5::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后建立连接

3.如果显示连接,但没有出现 [root@GEC6818 /]# 按 Ctrl+c

步骤如下:

执行程序以后,即可看到程序在开发板上执行。

(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挂载

总结:

     嵌入式这一行,如我老师所说,重要的是胆大心细,要编程习惯好,单单将过程做一遍是没有用的,更何况把答案给人抄都有可能抄不来,上面的项目光光是配置我就配置了几天,总是出现这样或那样的问题,更何况这仅仅是配置。但难也有难的好处,没有门槛我还不来呢,嘿嘿。

    希望我的文章可以帮助到大家,也希望大家能越学越好!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Unity UGUI使用技巧与经验总结(不定期更新)

Text自动缩放参考连接: Unity -UGUI中Text文本框的自动调整,字体大小的自适应调节_unity添加的字体大小锁定-CSDN博客 Toggle按钮选择时,显示对应的UI界面: 为Toggle组件的On Value Change事件添加对需要显示的对象的SetActive…

无刷直流电机偏移角度

1、问题引入 (1)电机偏移角度是什么?若偏移角度不为0,如何让电机转起来? 1.1 GPT答案1 电机偏移角度的定义 电机的偏移角度是指电机的实际转子磁场位置与控制系统所认为的转子磁场位置之间的误差角度。这个误差可能是由于霍尔传感器安装不…

GitHub的简单操作

引言 今天开始就要开始做项目了,上午是要把git搭好。搭的过程中遇到好多好多的问题。下面就说一下git的简单操作流程。我们是使用的GitHub,下面也就以这个为例了 一、GitHub账号的登录注册 https://github.com/ 通过这个网址可以来到GitHub首页 点击中间绿色的S…

SD下载、安装、使用、卸载-Stable Diffusion整合包v4.10发布!

目录 前言概述 SD安装1、安装软件2、启动3、配置4、运行5、测试 导入SD模型【决定画风】常用模型下载安装模型 SD卸载SD文生图提示词提示词使用技巧提示词的高级使用技巧强调关键词 前言 我向来不喜欢搞一些没有用的概念,所以直接整理可能用到的东西。 sd简单的说…

CDN SSLTLS以及安全

随着互联网的发展,内容分发网络(CDN)在提升网站访问速度和安全性方面发挥了重要作用。然而,CDN在带来便利的同时也面临一些安全挑战。本文将探讨CDN的安全风险,并深入解析SSL/TLS加密技术及其在CDN中的应用。 CDN的安全…

电子电气架构 --- 中央处理器HPC及软件架构

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…

手写顺序流程图组件

效果图 完整代码 <template><div><div class"container" :style"{ width: ${spacingX * (colNum - 1) itemWidth * colNum}px }"><divv-for"(item, i) in recordList":key"i"class"list-box":style&…

html+css+js网页设计 美食 好厨艺西餐美食企业网站模板6个页面

htmlcssjs网页设计 美食 好厨艺西餐美食企业网站模板6个页面 网页作品代码简单&#xff0c;可使用任意HTML辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作&#xff09;。 …

Vue3中使用 Vue Flow 流程图方法

效果图&#xff1a; 最近项目开发时有一个流程图的功能&#xff0c;需要做流程节点的展示&#xff0c;就搜到了 Vue Flow 这个插件&#xff0c;这个插件总得来说还可以&#xff0c;简单已使用&#xff0c;下边就总结一下使用的方法&#xff1a; Vue Flow官网&#xff1a;https…

37. 数组二叉树

一、题目描述 二叉树只也可以用数组来存储&#xff0c;给定一个数组&#xff0c;树的根节点的值储存在下标1&#xff0c;对于储存在下标n的节点&#xff0c;他的左子节点和右子节点分别储存在下标2n和2n1&#xff0c;并且我们用-1代表一个节点为空&#xff0c;给定一个数组存储…

网关的主要类型和它们的特点

网关&#xff0c;作为网络通信的关键节点&#xff0c;根据其应用场景和功能特点&#xff0c;可以分为多种类型。 1.协议网关 特点&#xff1a; • 协议转换&#xff1a;协议网关的核心功能是转换不同网络之间的通信协议。例如&#xff0c;它可以将IPv4协议的数据包转换为IPv6协…

JAVA学习笔记_JVM

文章目录 初识jvm内存结构程序计数器(寄存器) 栈问题辨析内存溢出 线程诊断本地方法栈Heap堆内存溢出内存诊断 方法区内存溢出常量池 stringTable直接内存垃圾回收 初识jvm JRE JVM 基础类库 JDK JRE 编译工具 JavaSE JDK IDE工具 JavaEE JDK 应用服务器 IDE工具 jvm是…

无线AP安装注意事项

现在的办公楼、酒店等项目中都设计含有网络无线覆盖这一项&#xff0c;在项目实施中&#xff0c;往往采用的是便捷并且后期便于网络无线设备管理的无线ap设备&#xff0c;作为前端无线信号的覆盖。在具体安装无线AP过程中&#xff0c;我们必须要注意以下几点才能保证项目实施完…

PHP框架+gatewayworker实现在线1对1聊天--聊天界面布局+创建websocket连接(5)

文章目录 聊天界面布局html代码 创建websocket连接为什么要绑定&#xff1f; 聊天界面布局 在View/Index目录下创建index.html html代码 <div id"chat"><div id"nbar"><div class"pull-left">与牛德胜正在聊天...</div…

毕设中所学

1、交叉引用 在毕业设计论文Word中交叉引用参考文献_交叉引用如何标注[1~6]-CSDN博客 另&#xff1a;将标号或其他文字改为上标的快捷键是CtrlShift。 图的交叉引用一样&#xff0c;修改引用类型即可。 2、ENVI安装 ENVI5.6 安装教程&#xff0c;新手入门&#xff08;超详细…

xilinx的高速接口构成原理和连接结构及ibert工具的使用-以k7 GTX为例

一、相关简介 Xilinx的高速接口称之为transceivers(高速收发器&#xff09;&#xff0c;这部分的电路是专用电路&#xff0c;供电等都是独立的&#xff0c;根据速率可以分为GTP/GTX/GTH/GTY/GTM等。 Xilinx的高速接口是QUAD为单位的&#xff0c;没一个QUAD由一个时钟COMMON资…

Formality:官方Tutorial(一)

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 本文是对Synopsys Formality User Guide Tutorial中第一个实验的翻译&#xff08;有删改&#xff09;&#xff0c;Lab文件可以从以下链接获取。 Formality官方Tu…

【openwrt】OpenWrt 路由器的 802.1X 动态 VLAN

参考链接 [OpenWrt Wiki] Wi-Fi /etc/config/wirelesshttps://openwrt.org/docs/guide-user/network/wifi/basic#wpa_enterprise_access_point 介绍 基于802.1X 无线网络身份验证࿰

Mac 环境 VVenC 编译与编码命令行工具使用教程

VVenC VVenC 是一个开源的高效视频编码器&#xff0c;专门用于支持 H.266/VVC (Versatile Video Coding) 标准的编码。H.266/VVC 是继 HEVC (H.265) 之后的新一代视频编码标准&#xff0c;主要目的是提供比 HEVC 更高的压缩效率&#xff0c;同时保持或提高视频质量。H.266/VVC…

wx016基于springboot+vue+uniapp的超市购物系统小程序

开发语言&#xff1a;Java框架&#xff1a;springbootuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#…