2014-11-02 2 views
2

다음 코드 :pcl 라이브러리에 연결할 수 없습니다.

#include <ros/ros.h> 
#include <pcl_ros/point_cloud.h> 
#include <pcl/point_types.h> 
#include <boost/foreach.hpp> 

typedef pcl::PointCloud<pcl::PointXYZ> PointCloud; 
void callback(const PointCloud::ConstPtr& msg) 
{ 
    printf ("Cloud: width = %d, height = %d\n", msg->width, msg->height); 
    BOOST_FOREACH (const pcl::PointXYZ& pt, msg->points) 
    printf ("\t(%f, %f, %f)\n", pt.x, pt.y, pt.z); 
} 

int main(int argc, char** argv) 
{ 
    ros::init(argc, argv, "sub_pcl"); 
    ros::NodeHandle nh; 
    ros::Subscriber sub = nh.subscribe<PointCloud>("points2", 1, callback); 
    ros::spin(); 
} 

here

내 CMake에서 가져온 기본 예제입니다 PCL이 공식에 추천 정확한 구성입니다

cmake_minimum_required(VERSION 2.6 FATAL_ERROR) 
find_package(PCL 1.3 REQUIRED COMPONENTS common io) 
include_directories(${PCL_INCLUDE_DIRS}) 
link_directories(${PCL_LIBRARY_DIRS}) 
add_definitions(${PCL_DEFINITIONS}) 
target_link_libraries(${PROJECT_NAME} ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES}) 

website

나는 아직도 뒤에 오는 연결 오류를 얻는다 :

CMakeFiles/apsp_manifold.dir/src/apsp_manifold.cpp.o: In function `void pcl::detail::FieldMapper<pcl::PointXYZ>::operator()<pcl::fields::z>()': 
/usr/include/pcl-1.7/pcl/conversions.h:106: undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)' 
CMakeFiles/apsp_manifold.dir/src/apsp_manifold.cpp.o: In function `void pcl::detail::FieldMapper<pcl::PointXYZ>::operator()<pcl::fields::y>()': 
/usr/include/pcl-1.7/pcl/conversions.h:106: undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)' 
CMakeFiles/apsp_manifold.dir/src/apsp_manifold.cpp.o: In function `void pcl::detail::FieldMapper<pcl::PointXYZ>::operator()<pcl::fields::x>()': 
/usr/include/pcl-1.7/pcl/conversions.h:106: undefined reference to `pcl::console::print(pcl::console::VERBOSITY_LEVEL, char const*, ...)' 

위의 오류가 무엇이고 어떻게 제거 할 수 있습니까?

+0

'make VERBOSE = 1'을 시도하고 적절한 라이브러리가 있는지 컴파일러 옵션을 확인하십시오 ... 일부 라이브러리가 엉망인 것처럼 보입니다. – zaufi

답변

0

문제는 다음과 같이했다 : - 2011-08-09 튜토리얼의 코드는 페이지가 수정 된 마지막 시간 나이

이 내가 PCL 링크 방법이다.

내가 알 수있는 유일한 합리적인 설명은 분명히 PCL 라이브러리가 헤더에서 이전 버전과 관련된 코드를 제거하지 않았지만 해당 함수 호출과 관련된 심볼 파일 만 제거했기 때문입니다. 따라서 파싱이 발생합니다. 링크 할 것이 없으므로 링크가 실패하는 동안 함수 선언이 성공할 때 성공합니다. This은 사용을 끝낸 튜토리얼입니다.

1

그냥 추측 할 수 있지만 문제는 모든 필수 구성 요소가 포함되어 있지 않다는 것입니다.

find_package(PCL REQUIRED) 
include_directories(... ${PCL_INCLUDE_DIRS}) 
... 
target_link_libraries(... ${PCL_LIBRARIES}) 
관련 문제