Robotics StackExchange | Archived questions

Problems linking pcl::io in ROS indigo

Hello all;

I have been working for a while with ROS Indigo and its included version of PCL. I am on a Ubuntu 14.04 x64 desktop. Previous nodes all work ok, but in the one I am programming now, I need to include pcl::io. the code reduced to minimal is:

#include "ros/ros.h"
#include <ros/package.h>
#include <sensor_msgs/PointCloud2.h>

//PCL
#include <iostream>
#include <pcl/io/pcd_io.h>
#include <pcl/point_types.h>
#include <pcl_conversions/pcl_conversions.h>

int main(int argc, char **argv)
{

  ros::init(argc, argv, "halcon3D_test_node");
  ros::NodeHandle n;

  //test PointCloud_to_ObjectModel3D
  ros::Publisher pub = n.advertise<sensor_msgs::PointCloud2>("point_cloud", 1000);

  std::string path = ros::package::getPath("tekniker_halcon_drivers") + "/resources/";
    std::string fileName = path + "CSite1_orig-utm.pcd";

    pcl::PointCloud<pcl::PointXYZ>::Ptr cloud (new pcl::PointCloud<pcl::PointXYZ>);
    //pcl::io::loadPCDFile<pcl::PointXYZ> ("/home/alberto/catkin_euroc_ch1/src/tekniker_euroc_c1/resources/STL/object.pcd", *cloud);

  ros::Rate loop_rate(10);
  while (ros::ok())
  {
        sensor_msgs::PointCloud2 cloud2;
        pcl::toROSMsg(*cloud, cloud2);
        cloud2.header.frame_id = "point_cloud_link";
        cloud2.header.stamp = ros::Time::now();
        pub.publish(cloud2);
    ros::spinOnce();
    loop_rate.sleep();
  }
  return 0;
}

However, if I uncomment ths line:

pcl::io::loadPCDFile<pcl::PointXYZ> ("/home/alberto/catkin_euroc_ch1/src/tekniker_euroc_c1/resources/STL/object.pcd", *cloud);

I obtain the following linking errors:

//usr/lib/libpq.so.5: undefined reference to `SSL_get_peer_certificate@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `CRYPTO_num_locks@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_CTX_use_certificate_chain_file@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_use_certificate_file@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `ENGINE_free@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `OPENSSL_config@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_get_error@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_use_PrivateKey_file@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `X509_STORE_load_locations@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_set_ex_data@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_read@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `X509_STORE_set_flags@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSLv23_method@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `ENGINE_load_private_key@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `X509_get_subject_name@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `CRYPTO_set_id_callback@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_CTX_new@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_CTX_get_cert_store@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_check_private_key@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `ENGINE_by_id@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `ERR_get_error@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `CRYPTO_set_locking_callback@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_load_error_strings@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_new@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `X509_NAME_get_text_by_NID@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_write@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `X509_free@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_CTX_load_verify_locations@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_free@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_ctrl@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_set_verify@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `ENGINE_init@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_set_fd@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_connect@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `ERR_reason_error_string@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_CTX_ctrl@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_pending@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_use_PrivateKey@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `ENGINE_finish@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_library_init@OPENSSL_1.0.0'
//usr/lib/libpq.so.5: undefined reference to `SSL_shutdown@OPENSSL_1.0.0'
collect2: error: ld returned 1 exit status
make[2]: *** [/home/alberto/indigo_catkin_ws/devel/lib/tekniker_halcon_drivers/halcon3D_test_node] Error 1
make[1]: *** [tekniker_halcon_drivers/CMakeFiles/halcon3D_test_node.dir/all] Error 2
make: *** [all] Error 2
Invoking "make -j8 -l8" failed

Is there any known error related to this issue? Or any tweak to solve it? Thank you all in advance,

Alberto

Asked by altella on 2015-06-17 06:35:04 UTC

Comments

Please show us how you are building all of this. Without your CMakeLists.txt, we cannot know whether the issue might just be a missing statement or something more involved. Also: please remove all the boilerplate comments from your CMakeLists.txt before copy/pasting it in your question.

Asked by gvdhoorn on 2015-06-17 07:04:19 UTC

Answers

Add

  find_package(PCL 1.7 REQUIRED COMPONENTS common io)
  include_directories(${PCL_INCLUDE_DIRS})
  link_directories(${PCL_LIBRARY_DIRS})
  add_definitions(${PCL_DEFINITIONS})

and then

target_link_libraries(your_executable_name ${catkin_LIBRARIES} ${PCL_LIBRARIES})

to your CMakeLists.txt.

Asked by kokirits on 2015-06-17 07:15:49 UTC

Comments

My CMakeLists.txt is as follows. I have included PCL without specifying the components. Is this correct?

find_package(PCL REQUIRED)
include_directories(${catkin_INCLUDE_DIRS} ${PCL_INCLUDE_DIRS})
target_link_libraries(halcon3D_test_node ${catkin_LIBRARIES} ${PCL_LIBRARIES})

Asked by altella on 2015-06-17 07:55:39 UTC

It should be ok.

Asked by kokirits on 2015-06-17 09:55:11 UTC

Already tested with your CMakeLists.txt and mine, specifying PCL version and so on. The error is still there, and I still think something strange is happening. Any clue is highly appreciated !

Asked by altella on 2015-06-17 10:25:10 UTC