Visual Studio 2015中的pcl :: FPFHEstimationOMP链接

时间:2017-03-30 11:46:17

标签: visual-studio-2015 linker point-cloud-library point-clouds

我正在尝试从此网站(https://github.com/IntelVCL/FastGlobalRegistration

运行“创建输入”部分
// Assume a point cloud with normal is given as
// pcl::PointCloud<pcl::PointNormal>::Ptr object

pcl::FPFHEstimationOMP<pcl::PointNormal, pcl::PointNormal, pcl::FPFHSignature33> fest;
pcl::PointCloud<pcl::FPFHSignature33>::Ptr object_features(new pcl::PointCloud<pcl::FPFHSignature33>());
fest.setRadiusSearch(feature_radius_);  
fest.setInputCloud(object);
fest.setInputNormals(object);
fest.compute(*object_features);

FILE* fid = fopen("features.bin", "wb");
int nV = object->size(), nDim = 33;
fwrite(&nV, sizeof(int), 1, fid);
fwrite(&nDim, sizeof(int), 1, fid);
for (int v = 0; v < nV; v++) {
    const pcl::PointNormal &pt = object->points[v];
    float xyz[3] = {pt.x, pt.y, pt.z};
    fwrite(xyz, sizeof(float), 3, fid);
    const pcl::FPFHSignature33 &feature = object_features->points[v];
    fwrite(feature.histogram, sizeof(float), 33, fid);
}
fclose(fid);

包含 pcl / features / fpfh.h pcl / features / fpfh_omp.h 并链接到 pcl_features_debug.lib 等相关内容在lib文件中,编译器仍然存在编译代码的问题。它给了我这个链接错误:

  

错误LNK2001未解析的外部符号“private:virtual void __thiscall pcl :: FPFHEstimationOMP :: computeFeature(class pcl :: PointCloud&amp;)”(?computeFeature @?$ FPFHEstimationOMP @ UPointNormal @ pcl @@ U12 @ UFPFHSignature33 @ 2 @ @ pcl @@ EAEXAAV?$ PointCloud @ UFPFHSignature33 @ pcl @@@ 2 @@ Z)DepthToPointCloud D:\ Luan_Van \ PCL \ DepthToPoint \ build \ main.obj 1

我已经成功使用 pcl_io pcl_visualization 编译了其他一些代码,但是这个代码不起作用。任何人都可以指出我的代码有什么问题吗?

顺便说一句,我正在使用 Visual Studio 2015,PCL 1.8.0

1 个答案:

答案 0 :(得分:1)

请查看pcl / features / src / fpfh.cpp中的第48行:

  PCL_INSTANTIATE_PRODUCT(FPFHEstimationOMP, ((pcl::PointXYZ)(pcl::PointXYZI)(pcl::PointXYZRGB)(pcl::PointXYZRGBA))((pcl::Normal))((pcl::FPFHSignature33)))

在默认代码中,没有

的实例化
FPFHEstimationOMP<pcl::PointNormal, pcl::PointNormal, pcl::FPFHSignature33>

您可以将此行更改为

PCL_INSTANTIATE_PRODUCT(FPFHEstimationOMP, ((pcl::PointXYZ)(pcl::PointXYZI)(pcl::PointXYZRGB)(pcl::PointXYZRGBA)(pcl::PointNormal))((pcl::Normal)(pcl::PointNormal))((pcl::FPFHSignature33)))   

并重建PCL,这应该可行。