C++ 我的代码存在Boost更新问题

C++ 我的代码存在Boost更新问题,c++,boost,ros,C++,Boost,Ros,我最近将boost更新为1.59并安装在/usr/local中。我的系统默认值安装在/usr/中,为1.46。我正在使用ubuntu 12.04 我的代码库使用ROS Hydro(机器人操作系统)。我有一个相当大的代码库,在更新之前运行良好。但现在我明白了 terminate called after throwing an instance of 'boost::thread_interrupted' 我的堆栈跟踪 0x00007ffff573d0d5 in __GI_raise (sig=

我最近将boost更新为1.59并安装在/usr/local中。我的系统默认值安装在/usr/中,为1.46。我正在使用ubuntu 12.04

我的代码库使用ROS Hydro(机器人操作系统)。我有一个相当大的代码库,在更新之前运行良好。但现在我明白了

terminate called after throwing an instance of 'boost::thread_interrupted'
我的堆栈跟踪

0x00007ffff573d0d5 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
64  ../nptl/sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) where
#0  0x00007ffff573d0d5 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1  0x00007ffff574083b in __GI_abort () at abort.c:91
#2  0x00007ffff608f69d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3  0x00007ffff608d846 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4  0x00007ffff608d873 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5  0x00007ffff608d96e in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x00007ffff7f1cc3e in boost::this_thread::interruption_point() () from /usr/local/lib/libboost_thread.so.1.59.0
#7  0x00007ffff7001752 in bool boost::condition_variable::timed_wait<boost::date_time::subsecond_duration<boost::posix_time::time_duration, 1000000l> >(boost::unique_lock<boost::mutex>&, boost::date_time::subsecond_duration<boost::posix_time::time_duration, 1000000l> const&) () from /opt/ros/hydro/lib/libroscpp.so
#8  0x00007ffff6fff429 in ros::CallbackQueue::callAvailable(ros::WallDuration) () from /opt/ros/hydro/lib/libroscpp.so
#9  0x00007ffff7045f90 in ros::SingleThreadedSpinner::spin(ros::CallbackQueue*) () from /opt/ros/hydro/lib/libroscpp.so
#10 0x00007ffff702cd1b in ros::spin() () from /opt/ros/hydro/lib/libroscpp.so
#11 0x000000000041b795 in main ()
libvisensor.so的ldd

linux-vdso.so.1 =>  (0x00007fff7e3fe000)
libboost_thread.so.1.59.0 => /usr/local/lib/libboost_thread.so.1.59.0 (0x00007f29b4b60000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f29b4832000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f29b4536000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f29b4320000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f29b3f60000)
/lib64/ld-linux-x86-64.so.2 (0x00007f29b4c1d000)
libboost_system.so.1.59.0 => /usr/local/lib/libboost_system.so.1.59.0 (0x00007f29b3f5b000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f29b3d53000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f29b3b35000)
我注意到,出于一些有趣的原因,两个boost库都链接在一起,即1.46版和1.59版。
如何修复此错误?

ROS Hydro与Boost 1.59不兼容。如果在安装了ROS Hydro的同时安装了Boost 1.59,则会遇到问题。正如在下一页ROS答案中所解释的那样,我还将复制其中的一个摘录,以确保我的答案的完整性

ROS的源安装将与的其他版本一起编译 boost,但由于二进制不兼容的可能性 二进制版本的ROS必须与相同版本的安装在一起 他们用的是助推器。如果你想使用ROS和 除了标准版本之外,您还必须构建boost版本 来自源头的活性氧


因此,我应该在这之后重新安装hydro(我有Ubuntu12.04)(从源代码安装):?这是比较困难的方法。更简单的方法是使用ROS Hydro和1.46,或者使用ROS Indigo和Boost 1.53。我不知道ROS Hydro与Boost 1.59的兼容性如何。希望这能回答你的问题。
linux-vdso.so.1 =>  (0x00007fff7e3fe000)
libboost_thread.so.1.59.0 => /usr/local/lib/libboost_thread.so.1.59.0 (0x00007f29b4b60000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f29b4832000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f29b4536000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f29b4320000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f29b3f60000)
/lib64/ld-linux-x86-64.so.2 (0x00007f29b4c1d000)
libboost_system.so.1.59.0 => /usr/local/lib/libboost_system.so.1.59.0 (0x00007f29b3f5b000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f29b3d53000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f29b3b35000)