编译gtsam+Kimera-RPGO(解决boost报错问题)

过程曲折,耗时很长,我很菜。。

最后的方法是更新boost版本,然后cmake版本也得随之更新。

0.gtsam和Kimera-RPGO源码地址:

gtsamhttps://github.com/borglab/gtsam

Kimera-RPGOhttps://github.com/MIT-SPARK/Kimera-RPGO

1.第一阶段编译

使用了原有的1.65版本boost和3.9版本cmake,boost的.so和.a库安装在usr/lib/x86_64_gnu下。

这一阶段编译会出错,需要在gtsam和Kimera-RPGO的CMakelist.txt里各种加东西。

在cmake ..报错主要是类似:

(1)Could NOT find Boost (missing: system thread filesystem)

(2)Target “xxx” links to target "Boost::filesystem" but the target was not found.

解决完cmake之后,make主要出现的问题类似是:

/usr/bin/ld: cannot find -lBoost::serialization

上述问题在网上查了,对我而言都治标不治本。

也看到了更新boost的解决方法,最后决定重装boost。

下面重点记录重装boost后遇到的一些编译问题。

2. 第二阶段编译(重装boost和cmake)

千万不要使用autoremove boost 类似的命令!!!

(1)重装boost,由1.65.10升级到1.70.0,参考博客如下:

注意,经过后续观察,我的电脑(ubuntu18.04)应该是可以多版本boost共存。

所以ubuntu18.04自带的1.65.1版本boost可以不卸载,也就是下面博客中的卸载步骤不要执行,否则会导致ros相关包编译出问题。

Ubuntu16.04 卸载旧版本Boost库并安装新版本https://blog.csdn.net/qq_42037180/article/details/109343000

执行链接中的如下命令时:
 

sudo ./b2 install

修改为:

sudo ./b2 cxxflags=-fPIC cflags=-fPIC -a -d+2
sudo ./b2 cxxflags=-fPIC cflags=-fPIC -a -d+2 install

 加入fPIC的原因是:博客中的boost安装方法使用了编译好的静态库.a文件,会带有本地电脑的一些属性,需要加fPIC参数对静态库重新编译,加入自己电脑的属性。(大概意思是这个)

如果不加入fPIC,我在make时报了类似这个的错:

relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC

(2)重装cmake

由cmake3.9升级为3.15.0,主要是适配boost的版本,否则报错如下:

cmake_policy PUSH without matching POP

重装cmake链接为:
Ubuntu 14.04 升级 cmake 至最新版本(cmake 3.15.0https://blog.csdn.net/weixin_44758201/article/details/95729460

以上问题都解决之后,gtsam和Kimera-RPGO都可以编译通过了。

3. 思考

ubuntu18.04自带的1.65.1版本的boost不在/usr/local下,它的库文件和头文件分别在/usr/lib/x86_64-linux-gnu和/usr/include/boost下。

新安装的boost1.70的库文件和头文件分别在/usr/local/lib/和/usr/local/include下,按照安装教程配置好他的搜索路径后,从github上下载的源码基本可以直接找1.70的boost。

而1.65.1的boost可以继续用于原先安装的ros等包。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值