ROS C++ Package打包成.so动态库以及使用方法

ROS C++ Package打包成.so动态库以及使用方法

C++代码封装成.so库

封装前准备工作

对于文件夹结构如下的C++ ros包,在编译前build和devel文件夹为空,example_package是要进行封装的程序包,在封装前要保证:1.程序编译和功能没问题;2.函数的声明在example.h文件或example_core.h文件内,定义全部在example.cpp文件或example_core.cpp内,example_node.cpp文件只有main函数引用和使用类。

catkin_workspace
	├─build
	├─devel
	└─src
        └─example_package
            ├─include
            │  ├─example.h
		    │  └─example_core.h
            ├─launch
			│  └─example.launch
            ├─src
			│  ├─example.cpp
			│  ├─example_core.cpp
		    │  └─example_node.cpp
			├─CMakeLists.txt
			└─package.xml

修改cmakelist

对招以下内容修改cmakelist(复制粘贴一个cmakelist,原来的做一个备份,后面使用库的时候还要用),package.xml不需要修改。其中{example}是编译工程的名字,{Example}是要输出的动态库的名字,要添加或修改的部分已用注释说明

cmake_minimum_required(VERSION 2.8.3)
project(${example})

find_package(
  catkin REQUIRED COMPONENTS
  #依赖的包不变
)

catkin_package(
  INCLUDE_DIRS include
)

SET(CMAKE_CXX_FLAGS "-O2 -g -Wall ${CMAKE_CXX_FLAGS}")

set(ROSLINT_CPP_OPTS "--filter=-build/c++11")
roslint_cpp()

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)
#这条注释以上的内容都不需要修改
# 这里要修改,library
add_library(${Example} SHARED
  src/example_core.cpp
  src/example.cpp

)

#这里要修改install
install(
  TARGETS ${Example}
  EXPORT export_${example}
  ARCHIVE DESTINATION lib
  LIBRARY DESTINATION lib
  RUNTIME DESTINATION bin
)

 target_link_libraries(${Example} ${catkin_LIBRARIES})

修改完成后使用catkin_make进行编译,在devel/lib文件夹下生成libExample.so文件,就是需要的动态库

使用动态库

准备工作

将生成的动态库复制到程序包内,新建lib文件夹,删除example.cpp文件和example_core.cpp,只留下example_node.cpp做调用

catkin_workspace
	├─build
	├─devel
	└─src
        └─example_package
            ├─include
            │  ├─example.h
		    │  └─example_core.h
			├─lib
			│  └─libExample.so
            ├─launch
			│  └─example.launch
            ├─src
		    │  └─example_node.cpp
			├─CMakeLists.txt
			└─package.xml

修改cmakelist

cmake_minimum_required(VERSION 2.8.3)
project(${example})

find_package(
  catkin REQUIRED COMPONENTS
    #依赖的包
)

catkin_package(
  INCLUDE_DIRS include
)

SET(CMAKE_CXX_FLAGS "-O2 -g -Wall ${CMAKE_CXX_FLAGS}")

set(ROSLINT_CPP_OPTS "--filter=-build/c++11")
roslint_cpp()

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)
#此注释以上的不需要改
#添加lib到link_directories
link_directories(
  lib
  ${catkin_LIB_DIRS}
  )

add_executable(
  ${example}
  src/example_node.cpp
)
#添加与动态库 ${Example}之间的连接,这里${example}和${Example}都要改成自己工程和库的名字
target_link_libraries(${example} ${catkin_LIBRARIES} ${Example})
add_dependencies(${example} ${catkin_EXPORTED_TARGETS})

install(
  TARGETS ${example}
  ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION}
  RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

install(
  DIRECTORY launch/
  DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch
)


修改完cmakelist后,正常编译即可使用

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值