当前位置: 首页 > news >正文

视觉slam14讲 ——ch2实践部分

学习目标

1.了较g++和cmake编译
2.掌握CMakeCache.txt中的相关编译操作(生成静态库和共享库,添加可执行程序,链接库)
3.重点掌握如何在IDE中进行编译

2.4.2 helloSLAM

基础

g++ helloSLAM.cpp

默认得到一个可执行文件 a.out
请添加图片描述

./a.out

习题

g++编译指定输出的文件名的程序

g++ -o helloSLAM.exe helloSLAM.cpp

使用参数-o指定输出的文件名
请添加图片描述

2.4.3 使用cmake

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

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

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


执行命令

cmake .
make

通过MakeFile文件对工程进行编译

./helloSLAM

cmake编译后会产生大量的中间文件,我们不希望自己代码发布出去后带有这么多中间文件。所以在编译工程的时候,我们通常创建一个build文件夹专门用来存放编译过程中产生的中间文件,在代码发布时可以将build文件夹删除。

mkdir build
cd build
cmake ..
make

2.4.4 使用库

只有带有main函数的文件才能生成可执行文件/其他文件

在CMakeCache.txt

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

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

add_executable( useHello useHello.cpp )
# 将库文件链接到可执行程序上
target_link_libraries( useHello hello_shared )

静态库以.a作为后缀名,共享库以.so结尾。
两者的区别在于静态库每次调用都会生成一个副本,而共享库只有一个副本,更省空间

add_executable( helloSLAM helloSLAM.cpp )

会生成静态库

add_library( hello_shared SHARED libHelloSLAM.cpp )

生成共享库

使用一个库需要提供头文件文件,只要有头文件和库文件就可以调用这个库了

target_link_libraries( 可执行文件 库文件 )

如果可执行文件想调用库文件中的函数,他需要参考该库提供的头文件,以明白调用的格式。同时要将可执行文件链接到库文件上

2.4.5 使用IDE

使用kdevelop作为IDE,下载如下:

sudo apt-get update
sudo apt-get install kdevelop

但是我这边就报了很多像是E: 无法定位软件包 kdevolop连接失败之类的

解决办法:直接换源
软件和更新---->ubantu软件下载----->使用阿里云

设置断点调试功能

(1)在CMakeCache.txt中将工程调为debug模式

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

(2)配置
在视窗可以改变边框
右键设置断点,stop all结束

相关文章:

  • Android几种定时任务实现方式汇总
  • 【数据结构】哈夫曼编码与最优二叉树(哈夫曼树)
  • C++获取系统毫秒级时间(自1970年1月1日至今的毫秒数)
  • redis的详解和项目应用之PHP操作总结
  • 阿里、滴滴、华为等一线互联网分布式消息中间件:RocketMQ核心笔记
  • PostgreSQL的学习心得和知识总结(六十四)|关于PostgreSQL数据库 图式搜索(graph search)及递归查询 的场景说明
  • AI智能安防监控视频播放卡顿的原因排查与分析
  • 荧光染料Cy7 酰肼,Cy7 hydrazide,Cy7 HZ参数及结构式解析
  • OSPF——DR和BDR讲解
  • es的安装
  • 【SpringBoot】SpringBoot 读取配置文件中的自定义属性的 5 种方法
  • 前端的(typeScript)interface详解(个人学习用)
  • Android Studio应用基础,手把手教你从入门到精通(小白学习)总结2 之 常用界面布局和ListView
  • Flink Unaligned Checkpoint
  • 数据面最流行的工具包dpdk的前世-现在和未来
  • 2017-08-04 前端日报
  • Lsb图片隐写
  • macOS 中 shell 创建文件夹及文件并 VS Code 打开
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • React-redux的原理以及使用
  • SpiderData 2019年2月13日 DApp数据排行榜
  • TypeScript实现数据结构(一)栈,队列,链表
  • ViewService——一种保证客户端与服务端同步的方法
  • Vue官网教程学习过程中值得记录的一些事情
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 排序(1):冒泡排序
  • 前端设计模式
  • 学习ES6 变量的解构赋值
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • ## 临床数据 两两比较 加显著性boxplot加显著性
  • #QT(串口助手-界面)
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $.ajax()参数及用法
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (3)STL算法之搜索
  • (C#)获取字符编码的类
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (补)B+树一些思想
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (学习日记)2024.03.12:UCOSIII第十四节:时基列表
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (一)VirtualBox安装增强功能
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • (转)setTimeout 和 setInterval 的区别
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NetCore部署微服务(二)
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .pings勒索病毒的威胁:如何应对.pings勒索病毒的突袭?