<div dir="ltr"><div><div><div><div><div><div><pre>Package: pcl<br><pre>Version: 1.8.0+dfsg1-3<br> </pre>When I find_package PCL, I'm unable to create shared libraries linking against PCL due to the target "Qt5::Widgets" being exported.<br></pre><pre>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.<br></pre><pre><br></pre><pre>I am using Debian GNU/Linux 9.4 (stretch), kernel 4.13.0-36-generic, libc6 2.24-11+deb9u3.<br><br>libpcl-dev package information:<br><br>Architecture: amd64<br>Source: pcl (1.8.0+dfsg1-3)<br>Version: 1.8.0+dfsg1-3+b2<br>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)<br><br></pre><pre>Reproducible example:<br></pre><pre>1. mkdir /tmp/test_pcl_bug<br></pre><pre>2. cd /tmp/test_pcl_bug && mkdir src && mkdir build<br><br></pre><pre>3. touch CMakelists.txt<br></pre><pre>4. add the following content to the CMakeLists.txt<br></pre><pre></pre>CMakeLists.txt:<br>```<br>cmake_minimum_required(VERSION 2.8)<br>project(bug_pcl_qt)<br><br>find_package(PCL REQUIRED)<br><br>message(STATUS "${PCL_LIBRARIES}")<br>message(STATUS "${PCL_INCLUDE_DIRS}")<br><br>include_directories("${PCL_INC<wbr>LUDE_DIRS}")<br>add_library(test_pcl src/test.cpp)<br><br>target_include_directories(tes<wbr>t_pcl SYSTEM PUBLIC ${PCL_INCLUDE_DIRS})<br>target_link_libraries(test_pcl ${PCL_LIBRARIES})<br><br>```<br><br></div><div>5. touch src/test.cpp<br></div><div>6. add the following content to the src/test.cpp file (code copied from <a href="http://pointclouds.org/documentation/tutorials/writing_pcd.php#writing-pcd" target="_blank">http://pointclouds.org/documentation/tutorials/writing_pcd.php#writing-pcd</a>)<br></div><div><br></div>```<br>#include <iostream><br>#include <pcl/io/pcd_io.h><br>#include <pcl/point_types.h><br><br>int foo (int argc, char** argv)<br>{<br>  pcl::PointCloud<pcl::PointXYZ> cloud;<br><br>    // Fill in the cloud data<br>  cloud.width    = 5;<br>  cloud.height   = 1;<br>  cloud.is_dense = false;<br>  cloud.points.resize (cloud.width * cloud.height);<br><br>  for (size_t i = 0; i < cloud.points.size (); ++i)<br>  {<br>    cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0f);<br>    cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0f);<br>    cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0f);<br>  }<br><br>  pcl::io::savePCDFileASCII ("test_pcd.pcd", cloud);<br>  std::cerr << "Saved " << cloud.points.size () << " data points to test_pcd.pcd." << std::endl;<br><br>  for (size_t i = 0; i < cloud.points.size (); ++i)<br>    std::cerr << "    " << cloud.points[i].x << " " << cloud.points[i].y << " " << cloud.points[i].z << std::endl;<br><br>  return (0);<br>}<br><br><br>```<br><br></div>7. cd /tmp/test_pcl_bug/build<br></div>8. cmake -DBUILD_SHARED_LIBS=ON ..<br></div><div>8) throws the following warning:<br>```<br>CMake Warning (dev) at CMakeLists.txt:10 (add_library):<br>  Policy CMP0028 is not set: Double colon in target name means ALIAS or<br>  IMPORTED target.  Run "cmake --help-policy CMP0028" for policy details.<br>  Use the cmake_policy command to set the policy and suppress this warning.<br><br>  Target "test_pcl" links to target "Qt5::Widgets" but the target was not<br>  found.  Perhaps a find_package() call is missing for an IMPORTED target, or<br>  an ALIAS target is missing?<br>```<br><br></div>9. make<br><br></div>9) fails with error message:<br>```<br>[100%] Linking CXX shared library libtest_pcl.so<br>/usr/bin/ld: cannot find -lQt5::Widgets<br>collect2: error: ld returned 1 exit status<br>CMakeFiles/test_pcl.dir/build.<wbr>make:364: recipe for target 'libtest_pcl.so' failed<br>make[2]: *** [libtest_pcl.so] Error 1<br>CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/test_pcl.dir/all' failed<br>make[1]: *** [CMakeFiles/test_pcl.dir/all] Error 2<br>Makefile:83: recipe for target 'all' failed<br>make: *** [all] Error 2<br>```<br><br></div>Installing "libvtk6-qt-dev" and repeating the steps above fixes the issue.<br></div>