2017-07-03 4 views
0

Mein CMakeLists.txt umfasstBoost-Dateisystem Segmentierungsfehler in C++ 11 mit ROS

add_definitions(-std=c++11) 

Und es kompiliert mit den folgenden Warnungen:

/usr/bin/ld: warning: libboost_filesystem.so.1.58.0, needed by /opt/ros/kinetic/lib/libroscpp.so, may conflict with libboost_filesystem.so.1.64.0 

Und es seg-Fehler, wenn ich die ausführbare Datei ausführen.

GDB, fand ich die Ursache:

Thread 1 "pg_generator" received signal SIGSEGV, Segmentation fault. 
0x00007ffff762935d in boost::filesystem::detail::status(boost::filesystem::path const&, boost::system::error_code*)() from /usr/local/boost/1.64.0/stage/lib/libboost_filesystem.so.1.64.0 

Scheint, wie boost :: filesystem funktioniert nicht? Irgendwelche Ideen, wie Sie das beheben können?

Ich versuchte apt-get update und apt-get upgrade und Neustart. (Ich bin auf Ubuntu 16.04.)

+0

GCC brach die ABI-Kompatibilität für 'std :: string', wenn Sie von gcc4 zu gcc5 wechseln, stellen Sie sicher, dass sowohl der Boost als auch der Code kompilierbar kompiliert wurde. –

Antwort

0

Ich denke, ich habe in das gleiche Problem gerannt. Nach einer langen Zeit Debugging, ich fand, dass wir beide das gleiche getan haben: Wir verwenden zwei Versionen von Boost, um unsere Apps zu bauen. Nun, das ist das eigentliche Problem und nicht die Konflikte zwischen C++ 11 und Boost.

Da die ros boost 1.58 verwendet, sollten wir besser den gleichen Boost in anderen Teilen unseres Programms verwenden. (Ich verwende Boost 1,60 und Boost 1,64)

Wenn nur eine Boost-Version im Programm, wird das Problem gelöst.