当前位置:网站首页>ROS compilation calls the third-party dynamic library (xxx.so)

ROS compilation calls the third-party dynamic library (xxx.so)

2022-07-06 08:35:00 Will_ Ye

1. Problem

In the process of doing the project , Inevitable , Sometimes you need to use some third-party open source libraries , Or write your own dynamic library , Then you need to CMakeLists Add the path corresponding to these dynamic libraries , Compile .

The suffix of the dynamic library that needs to be called is generally .so, Sometimes I will encounter something except libxxx.so, also libxxx.so.x and libxxx.so.x.y.z these , Such as libzzz.so, also libzzz.so.1 and libzzz.so.1.0.0
In the suffix .so These figures after , In fact, it represents different versions , Used for version management , So the file name of the whole dynamic library is exquisite . such as libzzz.so.1.2.3,lib It is a fixed representative shared library ,zzz Is the shared library name ,.so Is a fixed suffix ,1 Indicates the major version number ,2 Indicates the minor version number ,3 Indicates the release version number .

The major version number : Incompatibility between different version numbers
Sub version number : Incremental upgrade , Backward compatibility
Release number : Error correction and performance improvement corresponding to the next version , Does not affect compatibility

And the longest name libxxx.so.x.y.z, Is the actual library file , It contains executable binary code . So you can use instructions readelf -d libzzz.so.1.2.3 Read this file .
In fact, when generating the Library , You can also directly generate only one libzzz.so As the actual library file , It depends on the individual , The standard point is that we should do a good job in library version management .

2. Method

stay ROS Of package in , Generally, two folders are created (include and lib), Deposit .h The header file and .so Dynamic library files , therefore , We just put the third-party dynamic library files into lib In the folder , Don't forget to put the relevant libxxx.so.x and libxxx.so.x.y.z Also put it in , No one can do without .
lib
lib

After the dynamic library file is placed , Revise it CMakeList That's all right.

cmake_minimum_required(VERSION 2.8.3)

SET(CMAKE_BUILD_TYPE Debug)

add_compile_options( -std=c++11)
project(gazebo_mobile_manipulator)

find_package(PCL 1.8 REQUIRED)
find_package(OpenCV REQUIRED)
find_package(catkin REQUIRED COMPONENTS 
nav_msgs 
roscpp 
rospy 
serial 
tf 
std_msgs 
std_srvs 
actionlib
actionlib_msgs
message_generation
geometry_msgs
pcl_conversions
pcl_ros 
PCL
)

catkin_package(
  CATKIN_DEPENDS roscpp rospy serial std_msgs message_runtime
  INCLUDE_DIRS include
  )

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)

link_directories(
  ${catkin_LIB_DIRS} lib
)
add_executable(test src/test1.cpp)
target_link_libraries(test ${PCL_LIBRARIES} ${catkin_LIBRARIES} ${OpenCV_LIBRARIES} libzzz.so)

Pay attention to the last line , stay target_link_libraries Inside , Just add libzzz.so That's all right. , There is no need to add the version number that follows , adopt .so This will search for others .

then catkin_make Just compile it

原网站

版权声明
本文为[Will_ Ye]所创,转载请带上原文链接,感谢
https://yzsam.com/2022/187/202207060822255068.html