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++ 標準ライブラリとして選択していたことが判明しました。代わりに Compile Default を選択すると、コードは機能します。

同じ問題を抱えている人が来た場合に備えて、これをここに残します。これは間違った stdlib を選択する際の問題だったので、stdlib を追加しました。

于 2013-10-17T18:18:21.337 に答える