SLAM_Linux(Ubuntu)基础

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30241709/article/details/78892145

本机Ubuntu环境:



第一个简单的程序Hello SLAM:

首先新建一个文件夹,路径为/home/slambook/ch2


安装vim以及g++:

sudo apt-get vim

sudo apt-get g++

使用vim编写helloSLAM.cpp:

cd ./ch2

vim helloSLAM.cpp


按ctrl+[ 进入正常模式,:wq保存并返回

使用g++编译:


编译完成,出现helloSLAM.out,如果直接使用g++ helloSLAM.cpp,将会自动将输出文件命名为a.out

运行.out文件:


  • 使用cmake
在一个cmake工程中,我们使用cmake命令生成一个makefile文件,然后用make命令根据这个makefile文件的内容编译整个工程。
在slambook/ch2/中新建一个CMakeLists.txt文件:
vim CMakeLists.txt


CMakeLists.txt文件告诉cmake我们要对这个目录下的文件做什么事情。
安装cmake:
sudo apt-get install cmake
调用cmale对该工程进行分析:
cmake .
cmake会输出一些编译信息,然后在当前目录下生成一些中间文件,其中最重要的是MakeFile(自动化编译脚本)

使用make命令对工程进行编译,并且运行生成的helloSLAM:

使用cmake,我们对项目的编译管理工作,从输入一串g++命令,变成了维护若干个比较直观的CMakeLists.txt文件,这将明显降低维护整个工程的难度。
现在这个过程中唯一让我们不满的是,cmake生成的中间文件还留在我们的代码文件中。当想要发布代码时,我们并不希望把这些中间文件一同发布出去,一种更好的做法是让这些中间文件都放在一个中间目录中,在编译成功后,把中间目录删除即可:
mkdir build
cd build
cmake ..
make

我们把之前生成的全部删除,再按照此步骤实现一遍:

注:
删除文件夹时
rmdir只能删除空文件夹
可使用rm -rf删除非空文件夹
进入build文件夹,可看到可执行文件helloSLAM

  • 使用库
只有带有main函数的文件才会生成一个可执行程序,另一些代码打包成库供其他程序调用。
写一个libHelloSLAM.cpp文件:
vim libHelloSLAM.cpp

在CMakeLists.txt中加入以下内容:
add_library(hello libHelloSLAM.cpp)
现在CMakeLists变为:


然后,使用cmake编译整个工程
cd build
cmake ..
make
在build文件夹中就会生成一个libhello.a文件(库)
在Linux中,库文件分成 静态库共享库两种, 静态库以.a作为后缀名,共享库以.so结尾,差别在于 静态库每次调用都会生成一个副本,而共享库则只有一个副本,更省空间
如果要生成共享库,使用语句:
add_library(hello_shared SHARED libHelloSLAM.cpp)
此时得到的就是hello_shared.so了

为了使用库,我们需要提供一个头文件,说明库里都有些什么,libhello的头文件(这里使用gedit编写):


下面写一个可执行程序来调用这个简单的函数:





猜你喜欢

转载自blog.csdn.net/qq_30241709/article/details/78892145