-
Ubuntu18.04安装
-
虚拟机安装
虚拟机软件版本:VMware® Workstation 16 Pro
版本号:Ubuntu18.04
安装参考:http://t.csdn.cn/P71XR
虚拟机分辨率自适应问题参考:http://t.csdn.cn/LDvo5
-
C++程序编译器环境搭建
在主文件夹建立一个新的文件夹,命名为slambook,在此文件夹中进入终端,新建cpp文件:
touch main.cpp
打开文件,输写一个简单的程序验证是否安装了编译器:
#include <iostream>
using namespace std;
int main(int argc,char **argv){
cout<<"Hello SLAM"<<endl;
return 0;
}
关闭编辑器,安装g++编译器,并用g++编译器把C++文件编译成可执行文件,在终端输入:
sudo apt-get install g++
g++ main.cpp
出现了一个a.out
的文件,在终端输入:
./a.out
Hello SLAM!
即可正常运行C++文件。
-
实现虚拟机与主机复制粘贴功能
参考博客:http://t.csdn.cn/40gBi
-
使用cmake
新建一个CMakeLists.txt
文件:
touch CMakeLists.txt
在CMakeLists.txt文件中写入:
# 声明要求的cmake的最低版本
cmake_minimum_required( VERSION 2.8 )
# 声明一个cmake工程
project( helloslam )
# 添加一个可执行程序
# 语法:add_executable( 程序名 源代码文件 )
add_executable( main main.cpp )
在当前目录下进入终端,调用cmake进行编译:
cmake .
运行结果如下所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/c43cea8564fd4ec4a9d1c1ea4c002246.png#pic_center)
然后用make
指令对工程进行编译:
make
结果如图所示:
![在这里插入图片描述](https://img-blog.csdnimg.cn/987d3fe4b67e48cfa728f1fbd26cef8c.png#pic_center)
此时生成了一个main
文件(在CMakeList.txt
文件中声明的那个可执行程序的名字),执行他:
% ./main
Hello SLAM!
到此就能够运行文件了。
为了让中间文件放在一个中间目录中,更常用的编译cmake工程的做法如下:
mkdir build
cd build
cmake ..
make
-
使用库
在/lambook/ch1中新建cpp文件:
// 这是一个库文件
#include <iostream>
using namespace std;
void printHello(){
cout << "Hello SLAM"<< endl;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/bdf21e0d6e474c149fdf1612eb7a9e08.png#pic_center)
这个库中提供了一个printHello
函数,调用此函数可以输出一条信息。在CMakeLists.txt里加上如下内容:
add_library( hello libHelloSLAM.cpp )
![在这里插入图片描述](https://img-blog.csdnimg.cn/4010eca3ad204ac8b9b5fde6cfc01abc.png#pic_center)
这条命令告诉cmake,我们想把这个文件编译成一个叫做hello
的库。然后,和上面一样,使用cmake编译整个工程:
终端输入:
cd build
cmake ..
make
![在这里插入图片描述](https://img-blog.csdnimg.cn/3954fa5a37a44ba9990047874801b2a9.png#pic_center)
这时在build文件夹中就会生成一个libhello.a
文件,这就是我们得到的库。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e10d572b49864a50b7dbd14f749b1221.png#pic_center)
在Linux中,库文件分为静态库和共享库两种。静态库以.a为后缀名,共享库以.so结尾。所有库都是一些函数打包后的集合,差别在于静态库每次被调用都会生成一个副本,而共享库则只有一个副本,更省空间。
add_library( hello_shared SHARED libHelloSLAM.cpp )
![在这里插入图片描述](https://img-blog.csdnimg.cn/2d1e035300fd4712a13b3b6a29497280.png#pic_center)
为了让别人知道库中的内容,我们需要提供一个头文件,说明这些库中的内容。
#ifndef LIBHELLOSLAM_H_
#define LIBHELLOSLAM_H_
void printHello();
#endif
这样,根据这个文件和我们刚才编译得到的库文件,就可以使用printHello
函数了。最后写一个可执行程序useHello.cpp
来调用这个简单的函数:
#include "libHelloSLAM.h"
// 打印hello的函数
int main(){
printHello();
return 0;
}
然后在CMakeLists.txt
中添加一个可执行程序的生成命令,链接到刚才使用的库上:
add_executable(useHello useHello.cpp)
target_link_libraries(useHello hello_shared)
![在这里插入图片描述](https://img-blog.csdnimg.cn/120d3b01b2f54f5b8b1de9c6be2bdd3a.png#pic_center)
终端cmake:
cd build
cmake ..
make
后得到的结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/e5b1446a3afc4f9cb6470d27d7677594.png#pic_center)
在配置过程中碰到了这个问题:
![在这里插入图片描述](https://img-blog.csdnimg.cn/f0ae3fe986fc401083050bbfcba5a904.png#pic_center)
后来发现是CMakeLists.txt
拼写出了问题…
最后调用:
% ./useHello
结果:
![在这里插入图片描述](https://img-blog.csdnimg.cn/ff3b5b21fe394b3783547216ed64aa1e.png#pic_center)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)