ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange |
1 | initial version |
PCL is a 'system dependency' (ie: something used by ROS packages, but not a ROS package itself).
To use a newer version of a system dependency there is a relatively simple procedure:
/usr/local
if building from source, or if you're using your system's pkg manager, in the appropriate system location)CMakeLists.txt
of all affected packages to add version requirements to the find_package(..)
linesAt this point all the packages in your workspace should be using the new version of the dependency (provided you did step 4 correctly).
Step 1 is really important: it's allright to use pkg A with dependency X version Q, and pkg B with dependency X version W, as long as A does not link anything from B, nor B from A. Linking two different versions of dependency X into the same binary is generally not very stable, and can lead to SEGFAULT
s (in the case of C/C++) and/or other strange, unexpected and hard to diagnose problems.
If the two packages do not directly share any binary artefacts, but are standalone and communicate only through messages, it can work.
Step 4 is equally important: pkgs typically look for PCL with something like find_package(PCL REQUIRED)
. If you have both 1.7 and 1.8 on your system, CMake may end up finding 1.7 before 1.8, resulting in 1.7 being used.
So summarising: follow the above procedure, and make sure to update any find_package(PCL ..)
lines to read find_package(PCL 1.8 ..)
. If depending on any of the perception_ros
packages, you would have to update the line in (at least) pcl_ros
.
2 | No.2 Revision |
PCL is a 'system dependency' (ie: something used by ROS packages, but not a ROS package itself).
To use a newer version of a system dependency there is a relatively simple procedure:
/usr/local
if building from source, or if you're using your system's pkg manager, in the appropriate system location)CMakeLists.txt
of all affected packages to add version requirements to the find_package(..)
linesAt this point all the packages in your workspace should be using the new version of the dependency (provided you did step 4 correctly).
Step 1 is really important: it's allright to use pkg A with dependency X version Q, and pkg B with dependency X version W, as long as A does not link anything from B, nor B from A. Linking two different versions of dependency X into the same binary is generally not very stable, and can lead to SEGFAULT
s (in the case of C/C++) and/or other strange, unexpected and hard to diagnose problems.
If the two packages do not directly share any binary artefacts, but are standalone and communicate only through messages, it can work.
Step 4 is equally important: pkgs typically look for PCL with something like find_package(PCL REQUIRED)
. If you have both 1.7 and 1.8 on your system, CMake may end up finding 1.7 before 1.8, resulting in 1.7 being used.
So summarising: follow the above procedure, and make sure to update any find_package(PCL ..)
lines to read find_package(PCL 1.8 ..)
. If depending on any of the perception_ros
packages, you would have to update the line in (at least) pcl_ros
.