酸菜鱼的SLAM之旅(1)

key: Ubuntu的配置和Makefile实践


2019年3月23日:Ubuntu环境配置

前言

一开始我以为之前用ubuntu上过程设跑过C,配置过环境,应该没啥问题的,所以看了看十四讲的实践部分,感觉不就调两个库的事情吗,就直接跳过了。今天想起来,准备用自己的电脑run一遍,一用起来才发现关于ubuntu的知识都忘光了,环境居然只有gcc,cpp都编译不了,很难受。所以写点东西记录一下,下次要是又忘光了还可以看。


Ubuntu基本命令

ubuntu的系统命令基本以sudo apt-get前缀,下面以我痛苦的安装过程记录一些可能有用的命令:

安装命令

sudo apt-get install g++  //安装软件g++

移除命令

sudo apt-get remove g++  //卸载

检查更新

sudo apt-get update //好像是检查装了的软件和当前发行版本,拉下来一个软件列表

升级

sudo apt-get upgrade //升级软件

切换到root用户(虽然我不知道为啥root还是有些文件夹会被拒绝访问?)

sudo su -  //需要输密码 占个坑,以后看看关于root、777的内容

查看当前系统版本

lsb_release -a

然后我insatll g++的时候,提示一堆什么破依赖关系不对,而且还不让我破坏。我真的吃柠檬了。然后上网疯狂搜,解决办法是【换源 + aptitude】

换源方法参考的是这个大佬,反正大概就是系统设置 - 软件与更新 - 服务器选其他 - 查找最快源 - 找到之后设置成这个源,其实我也不知道有没有用,感觉迟早有用。

然后aptitude是一个提供解决依赖关系的程序

先安装一下

sudo apt-get install aptitude

然后用它来解决你的安装问题

sudo aptitude install g++ //我是装g++啦

然后会刷刷刷一大堆信息,最后给出一个提示办法,选择是[y/n/q]:

  • 选择y就是执行当前方案(它给我提供的第一个方案是啥也不做,然后告诉我解决问题啦,我:???)
  • n是拒绝当前方案,然后会提供下一个方案,反正我解决上面提到的sb依赖问题的方法是【降低装了的软件的版本】的那个方案,最后搞定了
  • q原来是quit的意思,我还以为是啥question的派生词,具体解释一下,还是太菜了…

后面跟着流程走就搞定了

装完之后-v 看一下是不是装成功了


编译&MakeFile(占坑)

  • 以后更新点关于makefile的
  • 被自己菜哭了

我凉了..为什么cd到out文件的目录下,执行命令还是

//已经cd到a.out的目录下了

a.out //a.out:未找到命令
./a.out  //fuck you g++

编译运行过程

先创建一个生成makeFile文件的文件(CMakeLists.txt),内容如下(选择使用,非一定全部):

# makeFile名字叫CMakeLists.txt  大小写敏感 名字后缀敏感
# 声明要求的cmake 最低版本
cmake_minimum_required( VERSION 2.8 )

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

# 添加一个可执行程序
# 语法:add_executable( 程序名源代码文件)
add_executable( a a.cpp ) #a为生成的程序名,a.cpp为源文件

# 添加一个库
#hello为库名,iamlib是源文件,里面没有main函数,只有一些定义好的函数或者变量

add_library(hello iamlib.cpp)  #静态库

add_libray(hello_shared SHARED iamlib.cpp) #动态库

#将生成的库hello链接到可执行程序a中,此时a就可以调用hello中的函数了
target_link_libraries(a hello) 

这里插一段书里面对动态库和静态库的解释:

在Linux 中,库文件分成静态库和共享库两种。静态库以.a 作为后缀名,共享库以.so结尾。所有库都是一些函数打包后的集合,差别在于静态库每次被调用都会生成一个副本,而共享库则只有一个副本,更省空间。

同时,为了使用这些库,还需要自己定义一个头文件,头文件里就是库里面的函数名,demo如下:

#ifndef LIBHELLOSLAM_H_
#define LIBHELLOSLAM_H_
    void printHello();
#endif

之后在cpp里面引入这个头文件好像就可以调用里面的函数了。

然后调用cmake分析当前工程,生成makefile

cmake .  //先cd到代码的当前目录

然后使用生成的makeFile生成可执行文件

make  //就是这个指令

然后就生成了一个可执行文件,(占坑: a 和 a.out 的区别)

./a  //运行

十四讲还给出一个大佬做法,用于快捷删除编译的中间文件。大概就是新建一个目录然后对目录上一层进行cmake,这样子中间文件就都生成在当前目录了,最后make完再删掉就是了。

mkdir build
cd build
cmake ..
make

Kdevelop使用

安装东西使用aptitude感觉会比较靠谱

sudo aptitude install kdevelop //选择第二个降版本的解决方案

然后用法跟普通IDE差不多,不过添加工程文件好像是自己先写好CmakeList.txt之后,从导入工程->导入这个CmakeList.txt就可以了,以这个文件夹为根目录创建cpp和h文件,然后好像会自动进里一个build文件夹,然后【F8】就可以把项目run起来了(前提是cpp和h,CMakeLists都是正确的。

如果想使用debug模式(可以单步执行),需要在CmakeLists里面加入这一句:

set( CMAKE_BUILD_TYPE "Debug") //我是加到了工程名下面

然后想run起来程序,还需要配置,打开【运行】 - 【配置启动器】 - 【Add New-应用程序(左上角加号)】 - 【工程目标选到可执行文件下】 - 【配置相干参数】(我好像是按了F8之后就会提示要这样子做)

(!!!!我佛啦,原来在这里,浪费了20mins)
Acuyoq.md.jpg

PS:在配置启动器的那一项中可以输入预先设置的参数以及选择路径,选择路径就是为了使得程序能够找到你需要处理的文件,如TXT或者img。

搞定上面那一步之后,主界面的【Execute】就是直接跑,【Debug】就是设置断点模式单步进入,断点需要自己设置在代码每一行的左侧,然后就可以使用【Debug】。在Debug模式中,【F10】是单步运行,【F11】是单步跟进,【F12】是单步跳出,左边还能看到属性的值(看变量值这个真的舒服)。

(PS:然后我查了查,发现所有的IDE都可以,DEV是调试过程中选中那个变量然后右边【查看变量】,然后左边的窗口就会显示这个变量当前的值了,虽然看多维数组的时候有点麻烦,但好歹能看?)

(PSS:在今天以前,我一直是用cout来查看变量的值的,dbq,我真的太菜了)

AYk1xI.jpg

文章目录
  1. 1. 2019年3月23日:Ubuntu环境配置
    1. 1.1. 前言
    2. 1.2. Ubuntu基本命令
    3. 1.3. 编译&MakeFile(占坑)
      1. 1.3.1. 编译运行过程
    4. 1.4. Kdevelop使用