Generating project with PCL (Point Cloud Library) on Mac OS X

匿名 (未验证) 提交于 2019-12-03 08:46:08

问题:

I installed all the dependencies and the pre-compiled PCL library as it suggested on their site.

After I installed everything I wanted to generate a project following this tutorial.

After executing the 'make' command I get several warnings and the following two errors:

37 warnings generated. Linking CXX executable pcd_write_test Undefined symbols for architecture x86_64:   "pcl::PCDWriter::writeASCII(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, sensor_msgs::PointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, int)", referenced from:       pcl::PCDWriter::write(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, sensor_msgs::PointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, bool) in pcd_write.cpp.o   "pcl::PCDWriter::writeBinary(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, sensor_msgs::PointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&)", referenced from:       pcl::PCDWriter::write(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, sensor_msgs::PointCloud2 const&, Eigen::Matrix<float, 4, 1, 0, 4, 1> const&, Eigen::Quaternion<float, 0> const&, bool) in pcd_write.cpp.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 (use -v to see invocation) make[2]: *** [pcd_write_test] Error 1 make[1]: *** [CMakeFiles/pcd_write_test.dir/all] Error 2 make: *** [all] Error 2 

Anybody has any suggestions how to fix this?

I am using Mac OS X 10.9.4.

回答1:

on a mac-book pro yosemite(10.10.3) i have done the following to get the pcl-tutorial (pcd_write.cpp) running.

in the CMakeLists.txt

cmake_minimum_required(VERSION 2.6 FATAL_ERROR) project(MY_GRAND_PROJECT) find_package(PCL 1.8 REQUIRED COMPONENTS common io) include_directories(${PCL_INCLUDE_DIRS}) link_directories(${PCL_LIBRARY_DIRS}) add_definitions(${PCL_DEFINITIONS}) add_executable(pcd_write_test pcd_write.cpp) target_link_libraries(pcd_write_test ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES}) 

running ccmake .. in build-directory gives

 CMAKE_BUILD_TYPE                                                                CMAKE_INSTALL_PREFIX             /usr/local                                     CMAKE_OSX_ARCHITECTURES                                                         CMAKE_OSX_DEPLOYMENT_TARGET                                                     CMAKE_OSX_SYSROOT                                                               DAVIDSDK_INCLUDE_DIR             DAVIDSDK_INCLUDE_DIR-NOTFOUND                  DAVIDSDK_LIBRARY                 DAVIDSDK_LIBRARY-NOTFOUND                      EIGEN_INCLUDE_DIRS               /opt/local/include/eigen3                      ENSENSO_INCLUDE_DIR              ENSENSO_INCLUDE_DIR-NOTFOUND                   ENSENSO_LIBRARY                  ENSENSO_LIBRARY-NOTFOUND                       LIBUSB_1_INCLUDE_DIR             /opt/local/include                             LIBUSB_1_LIBRARY                 /opt/local/lib/libusb-1.0.dylib                OPENNI2_INCLUDE_DIRS             OPENNI2_INCLUDE_DIRS-NOTFOUND                  OPENNI2_LIBRARY                  OPENNI2_LIBRARY-NOTFOUND                       OPENNI_INCLUDE_DIRS              /usr/include/ni                                OPENNI_LIBRARY                   /usr/lib/libOpenNI.dylib                       PCL_COMMON_INCLUDE_DIR           /usr/local/include/pcl-1.8   PCL_DIR                          /usr/local/share/pcl-1.8                       PCL_IO_INCLUDE_DIR               /usr/local/include/pcl-1.8                     PCL_OCTREE_INCLUDE_DIR           /usr/local/include/pcl-1.8 

and the code i compiled succesfully

#include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> int main(int argc, const char * argv[]) {     //insert code here..     pcl::PointCloud<pcl::PointXYZ> cloud;      cloud.width    = 5;     cloud.height   = 1;     cloud.is_dense = false;     cloud.points.resize (cloud.width * cloud.height);      for (size_t i = 0; i < cloud.points.size (); ++i){         cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);         cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);         cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);     }      pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud);     std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl;      for (size_t i = 0; i < cloud.points.size (); ++i)         std::cerr << "    " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;      return (0);      std::cout << "Hello, World!\n";     return 0; } 

...hope its usefull for someone!

nik



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!