Ubuntu Linux基本操作+安装工具+安装ROS+g++编译+Cmake

news2024/11/15 21:28:49

Ubuntu Linux基本操作+安装工具+安装ROS+g++编译+Cmake

1、进入到根目录

cd /

在这里插入图片描述

2、回到当前工作空间

cd ~

在这里插入图片描述

3、查看目录中的内容

ls

在这里插入图片描述

ll

在这里插入图片描述

4、创建文件夹

mkdir 123

在这里插入图片描述

5、删除文件夹

rm -rf 123/

这里我们在输入要删除的文件夹名时,可以通过按tab键快速补全对应的文件夹名。
按两次tab可查看对应输入名称的所有内容。
在这里插入图片描述

6、创建有连续子目录的文件夹

mkdir -p hh/pp

在这里插入图片描述

7、创建文件

touch hello.txt

在这里插入图片描述

8、打开txt

gedit hello.txt 

在这里插入图片描述
在这里插入图片描述

9、删除文件

rm hello.txt

在这里插入图片描述

10、清空终端内容

clear

在这里插入图片描述
在这里插入图片描述

11、查看自己输入终端的内容

我们可以通过输入history查看自己之前终端输入的内容:

history

在这里插入图片描述

12、下载安装Ubuntu的安装包

这里以下载安装vscode为例
进入https://code.visualstudio.com/
下载Linux x64 .deb 文件,.deb就是Ubuntu对应的安装包。
在这里插入图片描述
在这里插入图片描述
我们在下载好安装包的文件夹中打开终端

dpkg -i code_1.74.2-1671533413_amd64.deb 

但是这样是安装不了的,需要超级管理员权限。
在这里插入图片描述
在命令前添加sudo,管理员。

sudo dpkg -i code_1.74.2-1671533413_amd64.deb 

之后输入密码
在这里插入图片描述
这样就安装好了:
在这里插入图片描述
在这里插入图片描述

13、apt安装工具进行更新

man + 基本命令 就可以查看基本的介绍:

man apt

在这里插入图片描述
首先更新一下apt源

sudo apt update

在这里插入图片描述
这里我们注意到更新的地址是通过Ubuntu的网址进行更新的,但是有时候我们无法登陆Ubuntu的网址进行下载,那么我们就需要更换成国内镜像源网址。
首先点击Software & Update:
在这里插入图片描述
在这里插入图片描述
之后点击下图的那个选择
在这里插入图片描述
在这里插入图片描述
之后点击下拉列表,选择other
在这里插入图片描述
在这里插入图片描述
之后我们选择镜像源网址即可,这里我们选择阿里云的
在这里插入图片描述
之后我们选择好后,关闭即可
在这里插入图片描述
我们在更新一下apt源

sudo apt update

可以注意到源换成了aliyun的了。
在这里插入图片描述
这样就更新了可以下载的软件列表了
在这里插入图片描述

14、apt安装git后克隆

用git工具克隆一些代码
在这里插入图片描述
那么我们就安装git

sudo apt install git

在这里插入图片描述
之后执行git的克隆:

git clone https://github.com/gaoxiang12/slambook2.git

在这里插入图片描述
在这里插入图片描述
我注意到,克隆的文件夹中第三方库是引用别人的形式,我们并没有克隆下来,文件夹是空的。
在这里插入图片描述
在这里插入图片描述
我们为了要将引用的第三课也一并下载下来,我们需要在克隆时添加一些参数。
即添加–recursive 递归,这样就能克隆下来引用的内容了。

git clone --recursive https://github.com/gaoxiang12/slambook2.git

可以注意到子模块的内容也被下载下来了。
在这里插入图片描述
在这里插入图片描述
如果我们发现引用的三方库没有能够成功下载下来,那么我就进行下面的方法:
cd 到 git clone的主目录下,执行下述命令即可。

git submodule update --init --recursive

在这里插入图片描述

15、其他工具

1、htop 相当于windows的任务管理器

sudo apt install htop

在这里插入图片描述
在这里插入图片描述

2、vim 文本编辑工具

vim hello.txt 

在这里插入图片描述
之后点击键盘i,进入insert模式:
在这里插入图片描述
如果要退出该模式,按esc即可。

退出该模式后,我们要保存退出,就需要输入冒号,并输入wq。

:wq

表示写入并退出
在这里插入图片描述

3、terminator超级终端

sudo apt install terminator

安装好后,我们在按快捷键ctrl+alt+t打开的终端就是这个超级终端了。

该终端可以进行分栏,ctrl+shift+e,就可以左右分栏同时操作了。
在这里插入图片描述
按ctrl+shift+o,就可以上下分栏。
在这里插入图片描述
按住alt同时,按方向键,就可以选择栏进行写字了。
在这里插入图片描述

如果要同时操作所有栏,那就alt+a,全选所有栏进行操作,下面是全选后查看列表内容,可以同时对三个栏做ls操作,如果要退出全选,就alt+o退出全选。
在这里插入图片描述
在这里插入图片描述
如果我们要集中在一个分栏中进行输入内容,那么我就需要放大某一个栏,那么我们就输入ctrl+shift+x,就可以放大某一个栏了。如果想要恢复到原来所有分栏的状态,那么就再按一次ctrl+shift+x。
在这里插入图片描述
在这里插入图片描述

16、vscode配置

通过在项目路径中打开终端,输入一下内容,就可以打开vscode.

code .

在这里插入图片描述
之后安装一些C++对应的插件即可。

17、安装ros

首先,这个方法不是我发明的,详细请查看该链接:https://blog.csdn.net/LNSTOP/article/details/126599501

不管你是unbuntu 16\18\20,不管你是新安装的系统,还是ROS装了一部分进行不下去的烂摊子都适用!直接输入下面这一行代码,一键安装!!!!感谢开发这个的大神,向您献上最诚挚的祝福和最崇高的敬意!谢谢!!!

wget http://fishros.com/install -O fishros && . fishros 

我们只需在终端输入上面的代码即可。按照对应选择,自动就能安装好ROS。
在这里插入图片描述

安装好后,我们来做一个简单的测试:
第一个终端:

roscore

第二个终端:

rosrun turtlesim turtlesim_node 

第三个终端:

rosrun turtlesim turtle_teleop_key 

在这里插入图片描述
之后在第三个终端中,注意这里必须是在第三个终端中,我们按键盘的上下左右可以控制小海龟的移动。
在这里插入图片描述
这样我们的ROS就安装成功了。

18、用g++编译

首先我们查看一个.cpp文件,用来简单输出Hello SLAM!
在这里插入图片描述
通过g++对该文件进行编译

g++ helloSLAM.cpp

在这里插入图片描述
可以发现多了一个a.out可执行文件,可执行文件是绿色的。
之后我们执行这个文件。输出Hello SLAM! 内容:
在这里插入图片描述
我还可以通过g++进行编译时,生成其他文件名的可执行程序:

g++ useHello.cpp libHelloSLAM.cpp -o sayhello

在这里插入图片描述
我们可以注意到这个sayhello是没有任何后缀的,但是依然是可以执行的,在Linux中,后缀名只是和文件打开形式有关,比如.txt打开是通过gedit打开,只和打开形式有关,我们可以通过ll查看该文件可以执行的情况,发现sayhello对应的最左侧是-rwxrwxr-x,其中x就是可以执行的。

我们可以改变该文件的执行类型,使得sayhello不能够被执行。

chmod -x sayhello

在这里插入图片描述
我们还可以添加回来

chmod +x sayhello

在这里插入图片描述
我们执行sayhello,输入内容是Hello SLAM。
在这里插入图片描述

19、cmake使用

这里我们注意到,我们只是添加了两个cpp进行编译,真正的工程可是有上百个cpp文件的。因此我们无法通过一行命令将其编译完成。我们需要一个项目管理工具,用来管理文件编译调用时的依赖项复杂的情况。
该工具为cmake,一般如果没有安装ROS是不会安装cmake的。
如果要安装:

sudo apt install cmake

因为我之前安装了ROS。
在这里插入图片描述

1、针对单一文件

我们看一下Cmakelists.txt

# 声明要求的 cmake 最低版本 这里最低版本的限制是可以不要的。
# cmake_minimum_required(VERSION 2.8)

# 声明一个 cmake 工程 这个是必须的。
project(HelloSLAM)

# 设置编译模式 这里的编译模式如果不写默认是release发行模式。
# set(CMAKE_BUILD_TYPE "Debug")

# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 ) 这里编译后生成的可执行文件名就是helloSLAM
add_executable(helloSLAM helloSLAM.cpp)

# 添加hello库
# add_library(hello libHelloSLAM.cpp)
# 共享库
# add_library(hello_shared SHARED libHelloSLAM.cpp)

# 添加可执行程序调用hello库中函数
# add_executable(useHello useHello.cpp)
# 将库文件链接到可执行程序上
# target_link_libraries(useHello hello_shared)

首先我们在终端输入

cmake .

这一步是用来生成Makefile文件的。

第二步,我们在终端输入

make

这一步就是用生成的Makefile文件来组织项目中cpp h 文件的编译。编译过程实际是在第二步执行的。
我们执行一下helloSLAM:
在这里插入图片描述
一般情况下,我们都会创建一个文件夹,叫build。在这个build文件夹中进行编译。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、针对多文件引用库

1、静态库

先针对cpp文件生成一个库,这个静态库最后生成的叫做hello。

# 声明要求的 cmake 最低版本
# cmake_minimum_required(VERSION 2.8)

# 声明一个 cmake 工程
project(HelloSLAM)

# 设置编译模式
# set(CMAKE_BUILD_TYPE "Debug")

# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
# add_executable(helloSLAM helloSLAM.cpp)

# 添加hello库 先是静态库的名字 后面的是库的原文件。
 add_library(hello libHelloSLAM.cpp)
# 共享库
# add_library(hello_shared SHARED libHelloSLAM.cpp)

# 添加可执行程序调用hello库中函数
# add_executable(useHello useHello.cpp)
# 将库文件链接到可执行程序上
# target_link_libraries(useHello hello_shared)

依然是在新建build文件夹,这个文件夹中输出这个库。

cmake ..
make 

在这里插入图片描述
在这里插入图片描述
我们可以注意到生成的库是libhello.a静态库。

2、动态库

如果想让其生成动态库,Cmakelists.txt如下:

# 声明要求的 cmake 最低版本
# cmake_minimum_required(VERSION 2.8)

# 声明一个 cmake 工程
project(HelloSLAM)

# 设置编译模式
# set(CMAKE_BUILD_TYPE "Debug")

# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
# add_executable(helloSLAM helloSLAM.cpp)

# 添加hello库
# add_library(hello libHelloSLAM.cpp)
# 共享库 用于动态库
 add_library(hello_shared SHARED libHelloSLAM.cpp)

# 添加可执行程序调用hello库中函数
# add_executable(useHello useHello.cpp)
# 将库文件链接到可执行程序上
# target_link_libraries(useHello hello_shared)

依然是在新建build文件夹,这个文件夹中输出这个库。

cmake ..
make 

生成的是动态库.so
在这里插入图片描述

3、生成可执行文件

将可执行文件与生成的静态库连接到一起:

# 声明要求的 cmake 最低版本
# cmake_minimum_required(VERSION 2.8)

# 声明一个 cmake 工程
project(HelloSLAM)

# 设置编译模式
# set(CMAKE_BUILD_TYPE "Debug")

# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
# add_executable(helloSLAM helloSLAM.cpp)

# 添加hello库 生成静态库。
 add_library(hello libHelloSLAM.cpp)
# 共享库
# add_library(hello_shared SHARED libHelloSLAM.cpp)

# 添加可执行程序调用hello库中函数 生成可执行文件。
 add_executable(useHello useHello.cpp)

# 将库文件链接到可执行程序上 将静态库与可执行文件连接到一起。
 target_link_libraries(useHello hello)

依然是在新建build文件夹,这个文件夹中输出这个库。

cmake ..
make 

在这里插入图片描述

4、.h文件存放在其他文件夹中,需要在cmakelists.txt设置参数

这里如果.h文件放置到了其他文件夹中,cmakelists.txt就需要其他设置了。
添加include_directories(“include”)这句话:

# 声明要求的 cmake 最低版本
# cmake_minimum_required(VERSION 2.8)

#这里是用来添加.h文件夹存放搜索的文件夹
include_directories("include")

# 声明一个 cmake 工程
project(HelloSLAM)

# 设置编译模式
# set(CMAKE_BUILD_TYPE "Debug")

# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
# add_executable(helloSLAM helloSLAM.cpp)

# 添加hello库
 add_library(hello libHelloSLAM.cpp)
# 共享库
# add_library(hello_shared SHARED libHelloSLAM.cpp)

# 添加可执行程序调用hello库中函数
 add_executable(useHello useHello.cpp)

# 将库文件链接到可执行程序上
 target_link_libraries(useHello hello)
5、.cpp文件存放在其他文件夹中,需要在cmakelists.txt设置参数

就是给添加hello库的源文件cpp指定到存放的文件夹中。
添加可执行程序调用hello库的cpp也需要指定文件夹。

# 声明要求的 cmake 最低版本
# cmake_minimum_required(VERSION 2.8)

#这里是用来添加.h文件夹存放搜索的文件夹
include_directories("include")

# 声明一个 cmake 工程
project(HelloSLAM)

# 设置编译模式
# set(CMAKE_BUILD_TYPE "Debug")

# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
# add_executable(helloSLAM helloSLAM.cpp)

# 添加hello库
 add_library(hello ./src/libHelloSLAM.cpp)
# 共享库
# add_library(hello_shared SHARED libHelloSLAM.cpp)

# 添加可执行程序调用hello库中函数
 add_executable(useHello ./src/useHello.cpp)

# 将库文件链接到可执行程序上
 target_link_libraries(useHello hello)

如果要详细了解cmake就需要自行学习了。

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

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

相关文章

【寒假每日一题】洛谷 P1838 三子棋I

题目链接:P1838 三子棋I - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 小a和uim喜欢互相切磋三子棋。三子棋大家都玩过是吗?就是在九宫格里面OOXX(别想歪了),谁连成3个就赢了。 由于小a比较愚蠢&#xf…

《信号与系统实验》实验 3:信号时域抽样和恢复

文章目录 实验内容实验1:抽样定理验证实验f(t)间隔0.5s间隔1s间隔2s验证抽样定理实验2:信号恢复实验间隔0.5s间隔1s间隔2s抽样间隔对于信号恢复过程的影响DAC一阶保持器总结实验内容 实验1:抽样定

HTTPS协议的原理 --- RSA密钥协商算法

目录 一、TLS握手过程 二、RSA密钥协商握手过程 TLS第一次握手 TLS第二次握手 TLS第三次握手 TLS第四次握手 数字证书和CA机构 数字证书签发和验证流程 三、RSA 算法的缺陷 DH 密钥协商算法 一、TLS握手过程 上图简要概述来 TLS 的握手过程,其中每一个「框…

Morris遍历

1、引入 二叉树的遍历 递归实现的方式: public static class Node {public int value;Node left;Node right;public Node(int data) {this.value data;} }//每个节点都是被有限次访问,时间复杂度O(N),因为每次递归都要存储返回信息&#…

hadoop 集群搭建(详细版)

hadoop 集群搭建更改主机名映射设置免密同步时间创建工作目录下载jdk安装配置Hadoop修改配置文件向其他节点分发配置完成的程序为Hadoop添加环境变量启动集群初始化启动集群web页面web页面:[hdfsweb页面](http://192.168.88.128:9870/)web页面:[yarnweb页面](http://192.168.88…

3.0、Linux-常用目录、文件基本命令

3.0、Linux-常用目录、文件基本命令 命令:ls(列出目录) ls 命令在 Linux 中是常常被使用到的,因为 Linux 不像 Windows有可视化的界面; -a 参数:all ,查看全部的文件,包括隐藏文件&…

【免杀前置课——Windows编程】二十三、内存管理—堆内存管理、虚拟内存管理、文件映射、共享内存、不依靠临界区限制文件多开、DLL注入

内存管理—堆文件映射***文件映射的概念:***共享内存文件多开限制新思路DLL注入远程线程注入远程线程注入.exetest.dll文件映射 文件映射的概念: 文件映射(Mapping)是一种将文件内容映射到进程虚拟内存的技术。 映射成功的文件可以用视图,来引用这段内存,从而达到…

中科易安联网智能门锁2022年度总结

时光如梭,步履不辍。在这繁忙而又充实的一年,中科易安从提升服务、优化产品、扩展市场的维度发力,通过扎实的努力、不懈的勤勉,圆满地完成了2022年的工作。接下来,中科易安将为媒体、友商、用户朋友们呈现中科易安2022…

通过Lambda表达式 简单体验一下java方法引用

观看本文前 您需要先掌握 Lambda表达式 如果您之前没有接触过 可以先查看我的文章 java Lambda概念 通过实现线程简单体验一下Lambda表达式 java Lambda表达式的标准格式及其前提带有(代码演示) 然后 我们用 Lambda表达式 写在里面的其实就是一种解决方案 拿参数做操作 那么 …

Qss文件设置Qt界面风格

需要协商才能修改软件界面的风格,所以要留出通用的接口,于是选择使用QSS文件设置软件风格。 一、创建Qss文件 直接创建以.qss为后缀的文件 二、Qt使用Qss文件有两种办法 1、第一种办法,添加资源文件.qrc,然后在qrc文件中添加qss文…

【云边有个小卖部】

童年就像童话,这是他们在童话里第一次相遇。 那么热的夏天,少年的后背被女孩的悲伤烫出一个洞,一直贯穿到心脏。 刘十三被欺负得最惨,却想保护凶巴巴的程霜。 每当她笑的时候,就让他想起夏天灌木丛里的萤火虫&#xff…

Tic-Tac-Toe有多少种不同棋局和盘面状态(python实现)

目录 1. 前言 2. 如何去重? 3. 代码实现 3.1 对称等价判断 3.2 find_neighbor()改造 3.3 主程序及运行结果 4. 延申思考 1. 前言 在前两篇博客中实现了遍历搜索所有的Tic-Tac-Toe的棋局的python程序实现。 Tic-Tac-Toe可能棋局搜索的实现(python…

【Java寒假打卡】Java基础-多态

【Java寒假打卡】Java基础-多态概述多态中成员访问的特点多态的好处和弊端多态中转型多态中转型存在的风险概述 同一个对象在不同时刻表现出来的不同形态 多态的前提和体现 有继承/实现关系有方法重写。子类对父类进行方法重写有父类引用指向子类对象 package com.hfut.edu.…

【阶段二】Python数据分析NumPy工具使用02篇:数组的基本属性与数组的数据获取

本篇的思维导图: 数组的基本属性 NumPy数组的基本属性主要包括数组的形状、大小、类型和维数。 描述 代码 结果

Zookeeper详解(一)——基础介绍

概念 zookeeper官网:https://zookeeper.apache.org/ 大数据生态系统里的很多组件的命名都是某种动物或者昆虫,比如hadoop就是 🐘,hive就是🐝。zookeeper即动物园管理者,顾名思义就是管理大数据生态系统各…

Linux 系统调用的本质

简单概念 fd #include <unistd.h> #include <string.h>int main(int argc,char* argv[]) {char buf[20]{0};read(0,buf,15);write(1,buf,strlen(buf));return 0; }如果想查看某个系统编程的接口&#xff0c;比如想查看 open 函数的用法&#xff0c;可以这样操作…

Python调用C++代码用法——Linux

目录 前言 C/C动态共享库编译 ctype模块 ctype数据类型 使用案例 float数据 指针 结构体及结构体指针 numpy图像当作指针传入 参考资料&#xff1a; 前言 在项目开发中&#xff0c;有时会使用到多种编程语言&#xff0c;比如部分功能是C/C代码实现的&#xff0c;而另一…

《机器学习与应用》实验二:BP神经网络实验

文章目录 一、实验目的二、实验原理BP算法的数学描述三、程序四、实验结论一、实验目的 1、 熟悉MATLAB中神经网络工具箱的使用方法; 2、 通过在MATLAB下面编程实现BP网络逼近标准正弦函数,来加深对BP网络的了解和认识,理解信号的正向传播和误差的反向传递过程。 二、实验…

SAP MM物料与客户主数据的税分类

一&#xff0e;说明 在物料主数据、客户主数据中均有税分类的维护&#xff0c;税分类既不是税码也不代表税率&#xff0c;它们的作用是通过税务条件记录确定税码。所有的税分类在主数据中都是与国家相关的无组织机构数据&#xff0c;例如物料的销售组织有中国&#xff08;ZH&am…