pcl::io::loadPCDFile from objective-c ends in EXC_BAD_ACCESS



我正在尝试从objective-c应用程序中使用pcl。我有以下代码:

int i;
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
i = pcl::io::loadPCDFile("test.pcd", *cloud);

我正在创建一个带有按钮的非常简单的可可应用程序。按下按钮时,将调用仅包含上述代码的过程。包含上述代码的文件是一个 objective-c++ 文件。

问题是,对 pcl::io::loadPCDFile 的调用以EXC_BAD_ACCESS结束。stack_trace是

#0  0x00007fff8ecb60ef in std::string::compare(char const*) const ()
#1  0x000000010007e42d in bool std::operator==<char, std::char_traits<char>,     std::allocator<char> >(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*) at /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.8.sdk/usr/include/c++/4.2.1/bits/basic_string.h:2177
#2  0x00000001007bedea in pcl::PCDReader::readHeader(std::string const&, pcl::PCLPointCloud2&, Eigen::Matrix<float, 4, 1, 0, 4, 1>&, Eigen::Quaternion<float, 0>&, int&, int&, unsigned int&, int) at /Users/jkp/Development/pointclouds/pcl-pcl-1.7.0/io/src/pcd_io.cpp:133
#3  0x00000001007c2a47 in pcl::PCDReader::read(std::string const&, pcl::PCLPointCloud2&, Eigen::Matrix<float, 4, 1, 0, 4, 1>&, Eigen::Quaternion<float, 0>&, int&, int) at /Users/jkp/Development/pointclouds/pcl-pcl-1.7.0/io/src/pcd_io.cpp:675
#4  0x0000000100002e6d in int pcl::PCDReader::read<pcl::PointXYZ>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, pcl::PointCloud<pcl::PointXYZ>&, int) at /usr/local/include/pcl-1.7/pcl/io/pcd_io.h:208
#5  0x0000000100002213 in int pcl::io::loadPCDFile<pcl::PointXYZ>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, pcl::PointCloud<pcl::PointXYZ>&) at /usr/local/include/pcl-1.7/pcl/io/pcd_io.h:544
#6  0x00000001000015af in read() at /Users/jkp/Development/pointclouds/load_test/load_test/pcl_routines.cpp:18

我尝试将我的代码移动到.cpp文件中,以将 pcl 相关的代码保存在纯 c++ 中,但结果相同。

如果我调试代码并单步执行,我可以看到当调用 readHeader 时,变量file_name似乎无效。

如果我使用 pcl 文档中的示例,它们可以很好地编译和运行。

是否有我忽略的设置或明显的东西?

任何帮助,不胜感激。

谢谢。

编辑:

(将我的答案移至答案。是的,我是这里的菜鸟。对不起:) )

我发现了。如果我在 XCode 中创建 C++ prject,我会遇到同样的问题。如果我使用 cmake 生成一个 XCode 项目并在 XCode 中编译它,我没有问题。事实证明,我自己的项目选择了libc ++作为标准库C++。如果我选择编译默认值,代码就可以工作。

把它留在这里,以防有人遇到同样的问题。并添加了stdlib,因为这是选择错误的stdlib的问题。

最新更新