• 视觉slam14讲 ——ch2实践部分


    学习目标

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

    2.4.2 helloSLAM

    基础

    g++ helloSLAM.cpp
    
    • 1

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

    ./a.out
    
    • 1

    习题

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

    g++ -o helloSLAM.exe helloSLAM.cpp
    
    • 1

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

    2.4.3 使用cmake

    # 声明要求的 cmake 最低版本
    cmake_minimum_required( VERSION 2.8 )
    
    # 声明一个 cmake 工程
    project( HelloSLAM )
    
    # 设置编译模式
    set( CMAKE_BUILD_TYPE "Debug" )
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    执行命令

    cmake .
    
    • 1
    make
    
    • 1

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

    ./helloSLAM
    
    • 1

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

    mkdir build
    cd build
    cmake ..
    make
    
    • 1
    • 2
    • 3
    • 4

    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 )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

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

    add_executable( helloSLAM helloSLAM.cpp )
    
    • 1

    会生成静态库

    add_library( hello_shared SHARED libHelloSLAM.cpp )
    
    • 1

    生成共享库

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

    target_link_libraries( 可执行文件 库文件 )
    
    • 1

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

    2.4.5 使用IDE

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

    sudo apt-get update
    
    • 1
    sudo apt-get install kdevelop
    
    • 1

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

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

    设置断点调试功能

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

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

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

  • 相关阅读:
    我的十年程序员生涯--开篇
    3款软件分享,感兴趣的快快码住呀
    5 分钟教你搭建「视频动作分类」系统
    elasticdump官方教程
    Element-ui container常见布局
    360测试开发技术面试题目
    随机过程理论知识(六)
    【JavaWeb学习】—手托html页面和在浏览器中输入地址访问的背后不同原因(十一)
    使用Jupyter记事本记录和制作.NET可视化笔记
    使用ONE.Abp快速开发微服务,再也不用加班了
  • 原文地址:https://blog.csdn.net/weixin_50862344/article/details/126577000