ROS编译提示undefined reference to `boost::system::generic_category()

报错截图如下:

后来Google之后看到高赞链接如下:

How to link C++ program with Boost using CMake - Stack Overflow

大意是说找不到具体库的路径,所以需要显式指定一下,我按照对应加上去之后并没有用,并且查看对应编译结果,发现在一个大工程中,有的子工程可以找到库,有的子工程找不到,而且我之前也是编译成功过的,所以就很迷。

但后来我加上find_package之后发现,可以输出boost路径,我在系统别的地方用boost的测试用例也是可以输出的,然后重新安装库、安装ROS,都没有用,我想到了之前我手动安装过一次boost,但是中途出错了,后来我就直接sudo apt-get install 了,也成功了,我就想,会不会之前手动编译boost的时候出问题了,留下的一部分影响了环境?而且编译结果可以发现报错报的是boost头文件中的错误代码,说明头文件找到了,但是动态链接库找不到。

之后我发现/usr/local/include和/usr/include下各有一个boost文件夹,在我确认其他人的电脑上只有/usr/include下有boost,另一个没有后,我觉得问题可能出在了这里,就把多的那个boost删掉了,之后就编译成功了。

回头想想,原因可能是有两个头文件,一个能链接到库,一个链接不到,所以大工程下有的文件找到了对的头文件,有的找到了错的那个,才会出现这个玄学问题。

在此记录一下,得到的教训有几点:

1. 自己手动编译安装库的时候一定要记清楚输出的文件目录,如果手动编译失败了,记得删掉,以免像这次一样,留下个头文件,影响后面调库;

2. 要仔细读编译结果,一步步地定位出问题的地方;

3. 能不手动编译安装库就不要手动,sudo apt-get install不香嘛。。。

果然,环境问题千奇百怪,还是多见多看,才能处变不惊呐。

  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值