pcl::FPFHEstimationOMP 链接于 Visual Studio 2015
pcl::FPFHEstimationOMP linking in Visual Studio 2015
我正在尝试 运行 来自该站点的 "Creating input" 部分 (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文件,编译器编译代码还是有问题。它给了我这个链接错误:
Error LNK2001 unresolved external symbol "private: virtual void __thiscall pcl::FPFHEstimationOMP::computeFeature(class pcl::PointCloud &)" (?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 Studio2015,PCL1.8.0
请检查 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,应该可以。
我正在尝试 运行 来自该站点的 "Creating input" 部分 (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文件,编译器编译代码还是有问题。它给了我这个链接错误:
Error LNK2001 unresolved external symbol "private: virtual void __thiscall pcl::FPFHEstimationOMP::computeFeature(class pcl::PointCloud &)" (?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 Studio2015,PCL1.8.0
请检查 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,应该可以。