Я пытаюсь запустить следующее в C ++:
#include <pcl_ros/point_cloud.h>
#include "pcl/pcl_base.h"#include "pcl/PointIndices.h"#include "pcl/conversions.h"#include <pcl/kdtree/kdtree_flann.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/filters/voxel_grid.h>
using namespace std;
using namespace pcl;
void myFunction() {
...
ExtractIndices<PointXYZ> rangefilter;
...
}
int main() {
cout << "Hello" << endl;
}
Код компилируется, но я получаю ошибку сегментации, как только запускаю его; оператор cout не выполняется. Обратите внимание, что я даже не вызываю myFunction () в main. Единственное сообщение об ошибке
Segmentation fault (core dumped)
Когда я закомментирую строку ExtractIndices в myFunction, проблема исчезнет, и код будет работать нормально:
// ExtractIndices<PointXYZ> rangefilter;
Я запускаю это на Ubuntu с ROS и компилирую с помощью catkin_make, если это поможет.
Я был бы очень признателен за помощь в устранении этого, поскольку я застрял на этой проблеме некоторое время. Спасибо за прочтение!
Благодаря помощи комментаторов, я смог найти проблему. Я сделал обратную трассировку с GDB и погуглил вывод:
boost::math::lanczos::lanczos_initializer<boost::math::lanczos::lanczos17m64, long double>::init::init()
Потом нашел это: http://answers.ros.org/question/194699/segmentation-fault-when-using-correspondencerejectorsampleconsensus/
Что говорит о том, что вы не можете использовать C ++ 11 с PCL, поэтому я удалил эту строку из моего файла CMakeLists.txt:
set(CMAKE_CXX_FLAGS "-std=c++0x ${CMAKE_CXX_FLAGS}")
И это сработало!