尝试运行pcl提供的示例时,出现最奇怪的链接错误:
http://www.pointclouds.org/documentation/tutorials/cluster_extraction.php
我已将错误范围缩小到以下行:
ec.extract (cluster_indices);
当我删除此行时,没有链接错误,否则我得到一堆看起来像这样的东西:
/usr/local/lib/libpcl_search.a(organized.cpp.o): In function `pcl::search::OrganizedNeighbor<pcl::PointXYZL>::computeCameraMatrix(Eigen::Matrix<float, 3, 3, 0, 3, 3>&) const':
organized.cpp:(.text._ZNK3pcl6search17OrganizedNeighborINS_9PointXYZLEE19computeCameraMatrixERN5Eigen6MatrixIfLi3ELi3ELi0ELi3ELi3EEE
[_ZNK3pcl6search17OrganizedNeighborINS_9PointXYZLEE19computeCameraMatrixERN5Eigen6MatrixIfLi3ELi3ELi0ELi3ELi3EEE]+0xc):
undefined reference to `pcl::getCameraMatrixFromProjectionMatrix(Eigen::Matrix<float, 3, 4, 1, 3, 4> const&, Eigen::Matrix<float, 3, 3, 0, 3, 3>&)'
ec
是这种类型,pcl::EuclideanClusterExtraction<pcl::PointXYZ>
并且所有相关的点云也都使用pcl::PointXYZ
模板。这都是直接在示例之外的。
之前我有一个非常类似的错误,事实证明是因为我试图pcl::PointXY
与SampleConsesus
不支持的库一起使用。
为了尝试解决此问题,我nm
在libpcl_search.a
链接库上使用了包含的值,如下所示:
_ZNK3pcl6search17OrganizedNeighborINS_11PointNormalEE19computeCameraMatrixERN5Eigen6MatrixIfLi3ELi3ELi0ELi3ELi3EEE
哪些与所需的includePointXYZ
函数相似,但似乎不存在该实现?我如何才能找到这种情况,为什么?
因此,cmake似乎正在为依赖项而苦苦挣扎。我确定的原因是因为我们被迫包含pcl的方式。我们使用的操作系统称为QNX
,这意味着CMakeLists.txt
需求如下所示:
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
set (CMAKE_C_COMPILER /usr/qnx650/host/qnx6/x86/usr/bin/gcc)
set (CMAKE_CXX_COMPILER /usr/qnx650/host/qnx6/x86/usr/bin/g++)
project(cluster_extraction)
find_package(PCL 1.7 REQUIRED)
include_directories(/usr/local/include /usr/local/include/pcl-1.7)
link_directories(/usr/local/lib)
add_definitions(${PCL_DEFINITIONS})
add_executable (cluster_extraction testEuclideanclustering.cpp)
target_link_libraries (cluster_extraction ${PCL_LIBRARIES})
如果我将直接链接添加到pcl_search
的链接${PCL_LIBRARIES}
之后,它将进行编译。看来我们需要为制定自己的cmake
规则pcl
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句