2014-10-02 26 views
5

Tôi đã cài đặt tất cả các phụ thuộc và thư viện PCL đã biên dịch trước như được đề xuất trên site.Tạo dự án với PCL (Thư viện đám mây điểm) trên Mac OS X

Sau khi tôi đã cài đặt mọi thứ tôi muốn tạo một dự án theo hướng dẫn this.

Sau khi thực hiện 'make' lệnh tôi nhận được nhiều cảnh báo và hai lỗi sau đây:

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 

Bất kỳ ai có bất cứ đề nghị làm thế nào để sửa lỗi này?

Tôi đang sử dụng Mac OS X 10.9.4.

+0

Tôi tìm thấy giải pháp trong [thread] [1] này. [1]: http://stackoverflow.com/questions/16318961/how-do-i-link-pcl-library-properly-for-use-within-an-objective-c-app-compiled-in – Silex

+0

Bạn có tìm thấy giải pháp cuối cùng không? Tôi có chung vấn đề đó. – JessMcintosh

+0

Có, tôi đã tìm thấy giải pháp trong liên kết ở trên (nhận xét đầu tiên). – Silex

Trả lời

3

trên yosemite pro-book macbook (10.10.3) tôi đã thực hiện sau đây để chạy lệnh pcl-tutorial (pcd_write.cpp).

trong ccmake 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}) 

chạy .. trong xây dựng thư mục cho

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 

và mã tôi biên soạn thành công

#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; 
} 

... hy vọng nó hữu ích cho ai đó!

nik

+0

Cảm ơn bạn! Ràng buộc cmake trực tiếp vào thư viện pcl-1.8 đã làm việc cho tôi! sau khi tất cả các cruft tôi đã pcl-1.6 và pcl-1.8 ... cho OSX điều mà làm việc đã được cài đặt với brew và có 1,8 làm việc và chạy (tôi nghĩ, nhưng không chắc chắn) ... bằng cách sử dụng 1,8 tôi đã nhận:./pcd_write_test Đã lưu 5 điểm dữ liệu vào test_pcd.pcd. 0,00010142 0,694695 -0.26015 -0.342265 -0.446349 0.214207 0.173687 -0.84253 -0.400481 -0.874475 0.706127 -0.117635 0.908514 -0.598159 0.744714 – Orbitus007

Các vấn đề liên quan