我正在尝试从objective-c 应用程序中使用pcl。我有以下代码:
int i;
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
i = pcl::io::loadPCDFile("test.pcd", *cloud);
我正在用一个按钮创建一个非常简单的 Cocoa 应用程序。按下按钮时,将调用仅包含上述代码的过程。包含上述代码的文件是一个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 文档中的示例,它们可以编译并运行良好。
有没有我忽略的设置或明显的东西?
任何帮助表示赞赏。
谢谢。
编辑:
(将我的答案移至答案。是的,我在这里是菜鸟。对不起:))