LVI_SAM虚拟机安装复现(二)

0. 前言

前一篇文章里面,已经完成了 Ubuntu 18.04 和 ROS Melodic 的安装。
还没有安装好的读者,可以回去看这一篇文章。

前情概要:
LVI_SAM虚拟机安装复现(一)

本文主要记录了GTSAM源码编译安装过程中经历的坑
警告:并非从零开始零基础教你安装 GTSAM 哦

GTSAM是一个开源库,作用是数据平滑和地图构建的重要工具
对于LVI_SAM 来说是至关重要的库,这个库安装,直接影响后面 LVI_SAM 系统的编译,所以本文是非常关键的,请一定要重视起来。

1. GTSAM 源码下载

先clone到本地,当前(20250227)的最新版本是4.3

git clone https://github.com/borglab/gtsam.git

然后先创建个build文件夹

mkdir build && cd build

2. 第一个坑 cmake 配置

先敲一下pwd,看看当前路径是不是在build下

cmake配置

cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF .. //直接cmake可能会报错

记住这里要加-DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF
而且后面的..别忘记,cmake的用法就是要加路径的

3. 第二个坑 make install -j1

我们知道cmake是用来生成Makefile的
接下来就应该make了

这里即可以用下面的命令,一次性完成编译和安装

make install -j1

也可以先 make -j1 ,再 make install

我这里会遇到编译错误:

/home/ros/lvi_sam_workspace/gtsam/gtsam/discrete/Assignment.h:93:29: error: unused variable ‘_’ [-Werror=unused-variable]
     for (const auto& [idx, _] : keys) assignment[idx] = 0;  // Initialize from 0
                             ^

代码本身是没问题的,我问了kimi,他告诉我说大概率是编译器没有支持最新的C++17语法导致的,那么就说明编译g++版本不够新。

我用以下的命令查看 g++ 版本
g++ --version

我发现自己版本才7.5,于是考虑到升级到g++11

可以参考这个文章,升级g++11的方法:
【Ubuntu】如何安装gcc11 g++11, Ubuntu18,Ubuntu20,Ubuntu22_ubuntu安装gcc11-CSDN博客

sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt install gcc-11 g++-11 -y

不过,光升级gcc g++也不行,升级完以后还是会用默认的g++版本,你还需要将g++11设置为默认的编译器
如果不设置g++11为默认的g++编译器,那么编译的时候还是会继续用默认的g++(一般是g++7,这样还是会没法支持最新的c++17语法功能)

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 --slave /usr/bin/g++ g++ /usr/bin/g++-11

记得删除之前的缓存,这里缓存如果不删掉的话,cmake会直接用之前的结果,你的修改就没有意义了。

rm -f CMakeCache.txt

然后现在再执行之前的cmake命令

cmake -DGTSAM_BUILD_WITH_MARCH_NATIVE=OFF .. //直接cmake可能会报错

就可以看到下面的信息,说明已经能识别到正确的g++版本了

CMAKE_CXX_COMPILER_VERSION                       : 11.4.0

现在再执行一次 make install -j1
一般就不会再报错了。
如果还有报错的话,建议回过头去cmake看看 CMAKE_CXX_COMPILER_VERSION 是否已经升级到 9 以上了

4. 测试 GTSAM

前面的 make install -j1 如果不再报错,一般会得到类似下图的结果。
说明相关的库文件都已经安装到 /usr/local/lib 里了

但是我们要知道,这个路径其实是不能被直接找到的。一般编译器可以直接找到的是系统库路径,也就是 /usr/lib
那么我们就应该把 /usr/local/lib 手动添加到环境变量里。
环境变量在哪里改?

配置环境变量

如果库文件路径正确,但系统未正确识别,可以将库路径添加到环境变量中:

  1. ~/.bashrc 文件中添加以下内容:

    export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
    
  2. 重新加载配置:

    source ~/.bashrc
    

写一个测试代码(包括CMakeLists.txt)

然后我们参考这篇文章的内容,写一段代码 Ubuntu18.04安装GTSAM库并验证GTSAM是否安装成功(亲测可用)

可以建一个文件夹,里面放2个文件,一个CMakeLists.txt,一个 main.cpp
我这里放一下自己的内容:

除了红框是自己写的,其他文件都是 cmake . 自动生成的。

CMakeLists.txt内容

cmake_minimum_required(VERSION 3.0)
project(gtsam_check)
 
# 设置C++标准
set(CMAKE_CXX_STANDARD 17)
 
# 找到GTSAM库
find_package(GTSAM REQUIRED)
 
# 添加可执行文件
add_executable(gtsam_check main.cpp)
 
# 链接GTSAM库
target_link_libraries(gtsam_check gtsam)

有条件的同学,可以再好好看一下CMake的基础,后面的安装过程大概率还会用的到。
CMake 基础

main.cpp

#include <gtsam/geometry/Pose3.h>
int main() {
    gtsam::Pose3 pose;
    return 0;
}

编译命令:

  1. cmake .
  2. make

就会生成一个名为 gtsam_check 的可执行文件。
执行一下,如果不报错,就说明gtsam安装成功了。
如果报错了,看看报的是什么错。
我当时报的是这个错,找不到库文件 libmetis-gtsam.so 的路径:

./gtsam_check: error while loading shared libraries: libmetis-gtsam.so: cannot open shared object file: No such file or directory

这个错的解决方法,就在前面的配置环境变量的章节。

posted @ 2025-02-27 22:17  lucky_doog  阅读(103)  评论(0)    收藏  举报