报错截图如下:
后来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不香嘛。。。
果然,环境问题千奇百怪,还是多见多看,才能处变不惊呐。