Package: pcl Version: 1.8.0+dfsg1-3
When I find_package PCL, I'm unable to create shared libraries linking against PCL due to the target "Qt5::Widgets" being exported. This has been fixed in pcl 1.8.1 by adding a dependency on libvtk6-qt-dev in the libpcl-dev package. 1.8.0 is missing that dependency. I am using Debian GNU/Linux 9.4 (stretch), kernel 4.13.0-36-generic, libc6 2.24-11+deb9u3. libpcl-dev package information: Architecture: amd64 Source: pcl (1.8.0+dfsg1-3) Version: 1.8.0+dfsg1-3+b2 Depends: libboost-all-dev, libeigen3-dev, libflann-dev, libvtk6-dev, libqhull-dev, libopenni-dev, libopenni2-dev, libpcl-apps1.8 (= 1.8.0+dfsg1-3+b2), libpcl-common1.8 (= 1.8.0+dfsg1-3+b2), libpcl-features1.8 (= 1.8.0+dfsg1-3+b2), libpcl-filters1.8 (= 1.8.0+dfsg1-3+b2), libpcl-io1.8 (= 1.8.0+dfsg1-3+b2), libpcl-kdtree1.8 (= 1.8.0+dfsg1-3+b2), libpcl-keypoints1.8 (= 1.8.0+dfsg1-3+b2), libpcl-ml1.8 (= 1.8.0+dfsg1-3+b2), libpcl-octree1.8 (= 1.8.0+dfsg1-3+b2), libpcl-outofcore1.8 (= 1.8.0+dfsg1-3+b2), libpcl-people1.8 (= 1.8.0+dfsg1-3+b2), libpcl-recognition1.8 (= 1.8.0+dfsg1-3+b2), libpcl-registration1.8 (= 1.8.0+dfsg1-3+b2), libpcl-sample-consensus1.8 (= 1.8.0+dfsg1-3+b2), libpcl-search1.8 (= 1.8.0+dfsg1-3+b2), libpcl-segmentation1.8 (= 1.8.0+dfsg1-3+b2), libpcl-stereo1.8 (= 1.8.0+dfsg1-3+b2), libpcl-surface1.8 (= 1.8.0+dfsg1-3+b2), libpcl-tracking1.8 (= 1.8.0+dfsg1-3+b2), libpcl-visualization1.8 (= 1.8.0+dfsg1-3+b2) Reproducible example: 1. mkdir /tmp/test_pcl_bug 2. cd /tmp/test_pcl_bug && mkdir src && mkdir build 3. touch CMakelists.txt 4. add the following content to the CMakeLists.txt CMakeLists.txt: ``` cmake_minimum_required(VERSION 2.8) project(bug_pcl_qt) find_package(PCL REQUIRED) message(STATUS "${PCL_LIBRARIES}") message(STATUS "${PCL_INCLUDE_DIRS}") include_directories("${PCL_INCLUDE_DIRS}") add_library(test_pcl src/test.cpp) target_include_directories(test_pcl SYSTEM PUBLIC ${PCL_INCLUDE_DIRS}) target_link_libraries(test_pcl ${PCL_LIBRARIES}) ``` 5. touch src/test.cpp 6. add the following content to the src/test.cpp file (code copied from http://pointclouds.org/documentation/tutorials/writing_pcd.php#writing-pcd) ``` #include <iostream> #include <pcl/io/pcd_io.h> #include <pcl/point_types.h> int foo (int argc, char** argv) { pcl::PointCloud<pcl::PointXYZ> cloud; // Fill in the cloud data 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); } ``` 7. cd /tmp/test_pcl_bug/build 8. cmake -DBUILD_SHARED_LIBS=ON .. 8) throws the following warning: ``` CMake Warning (dev) at CMakeLists.txt:10 (add_library): Policy CMP0028 is not set: Double colon in target name means ALIAS or IMPORTED target. Run "cmake --help-policy CMP0028" for policy details. Use the cmake_policy command to set the policy and suppress this warning. Target "test_pcl" links to target "Qt5::Widgets" but the target was not found. Perhaps a find_package() call is missing for an IMPORTED target, or an ALIAS target is missing? ``` 9. make 9) fails with error message: ``` [100%] Linking CXX shared library libtest_pcl.so /usr/bin/ld: cannot find -lQt5::Widgets collect2: error: ld returned 1 exit status CMakeFiles/test_pcl.dir/build.make:364: recipe for target 'libtest_pcl.so' failed make[2]: *** [libtest_pcl.so] Error 1 CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/test_pcl.dir/all' failed make[1]: *** [CMakeFiles/test_pcl.dir/all] Error 2 Makefile:83: recipe for target 'all' failed make: *** [all] Error 2 ``` Installing "libvtk6-qt-dev" and repeating the steps above fixes the issue.