1

我正在尝试从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 文档中的示例,它们可以编译并运行良好。

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

任何帮助表示赞赏。

谢谢。

编辑:

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

4

1 回答 1

0

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

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

于 2013-10-17T18:18:21.337 回答