Goodbye, World

日々のプログラミングで得た経験を個人的な備忘録としてまとめてます.他のブログ・ページを参考させて頂いている部分が多いので,参考ページへのリンクを併記しております.

ROS Indigo + C++11 使用時のPCLのエラー [未解決]

ROS IndigoではPCL1.7が利用されているのですが,C++11のコンパイラ使用時にpcl/filter内の関数を利用しようとしてヘッダをインクルードすると,コンパルは通っても実行時にSegmentation faultで死んでしまいます.

rosrun your_pkg your_node
-> segmentation fault (core dumped)


既に数人困っている方がいるようで,下記でディスカッションされていますが,結局のところPCL1.7自体に含まれるバグが原因のようです.

github.com
github.com



従って,上のサイトに書かれている通り,バグを避ける正当な方法は,PCL1.8を自分でビルドしPCL1.7の代わりとして利用することだと思います.

In the CMakeLists.txt of the latest PCL:

CMakeLists.txt: SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11"

In the CMakeLists.txt of your catkin package:

find_package(PCL 1.7 REQUIRED) -> find_package(PCL 1.8 REQUIRED)
(Instead of depending ros_pcl etc...)

この方法,PCLのみを利用した単体のプログラムでは決定的な解決法になると思いますが,ROSを利用している場合,PCL1.8を利用する自作パッケージとPCL1.7を利用しようとする他の(Built-in)パッケージとの間で競合が起こり,ライブラリへのリンクエラーが発生してしまう?ようです.

warning: libpcl_common.so.1.7, needed by /usr/lib/libpcl_kdtree.so, may conflict with libpcl_common.so.1.8

不勉強なため上記の解釈が正しいのか自信がありませんが,試行錯誤してもリンクエラーが解消できないため,現在はお手上げ状態です.
ROS自身がPCL1.8を取り込むのを待つしかないかなぁ。。。

[追記]
どうやらDebugモードでビルドした時のみのエラーのようです.CMAKE_CXX_FLAGS_DEBUG に -O1 オプションをつけることで何故か回避できるとの情報あり.stackoverflow.com