文章目录
- 0.问题描述
- 1.问题原因
- 2.解决方法
- 2.1.方法1
- 2.1.方法2
- 3.成功效果
0.问题描述
\qquad
从github安装2023版本的g2o时,若ROS也安装了g2o,则会在编译时触发运行时冲突。具体表现为段错误,如若需要排查是否为ROS的g2o导致,则需要在C++编译时加上flags "-g -fsanitize=address"
。还有一种办法是查看可执行文件链接的库是否包含ros版本的g2o,具体操作为ldd xxx/xxx.so | grep -i g2o
,若查找到/opt/ros/noetic/lib/libg2o_xxx等字样则可归为此类问题。
1.问题原因
gedit ~/.bashrc
,查看是否包含命令source /opt/ros/noetic/setup.bash
如若包含,再次在终端检查LD_LIBRARY_PATH环境变量是否包含ROS的PATH:
printenv LD_LIBRARY_PATH
如若包含/opt/ros/noetic/lib,则是ROS的shell命令修改环境变量所致。
2.解决方法
2.1.方法1
根据上述的分析,解决问题的方案很简单,只需要在编译工程的终端加入
export LD_LIBRARY_PATH=""
使得全局查找library的时候避免ROS即可。如果LD_LIBRARY_PATH还有工程需要的路径,也可以赋其他值。
2.1.方法2
在CMakeLists.txt中加入shell命令,使得工程具有通用性:
execute_process(COMMAND export LD_LIBRARY_PATH="")
友情提示,重编译时请删除build文件夹即所有动态链接库缓存,否则会从CMakeCache.txt中直接调用g2o的路径。编译完成后使用ldd
命令再次检查可执行文件是否包含正确的g2o库,如若通过github的g2o按照,应该链接到/usr/local/lib/g2o
下的g2o动态链接库。
3.成功效果
通过ldd xxx | grep -i g2o
查看链接库时成功链接至自己安装的路径。需要注意,整个安装过程,请不要打开新的终端,以免造成环境变量污染。