生成静态库

ROS编程中需要把一些关键的类进行封装,供其他工程调用,这里使用cmake生成静态库.a,供其他程序调用。下面提供cmakelist里面的写法:

如果封装的库里面引用类第三方库,那么需要加入

find_package(Boost REQUIRED COMPONENTS system)

find_package(PCL REQUIRED QUIET)

除了必要的指令,如find_package,大体还需要三步

1.#添加头文件的搜索路径

# 添加头文件搜索路径

同样,这里包含了第三方库:

include_directories(include #本工程
  ${catkin_INCLUDE_DIRS} #使用的第三方库
  ${Boost_INCLUDE_DIR}
  ${PCL_INCLUDE_DIR}

)

2.# 生成库

生成库主要是用到类要包含add_library指令,包含 要生成的名字 动/静态库  源文件(cxx),可以把每个类单独打包,也可以把几个类打包到同一个静态库中,下面是几个类一块打包:

add_library( com_lib(1.生成库名字) STATIC (2.静态库,动态库应该是SHARED)
                               #3.三个类a b c
                               ${PROJECT_SOURCE_DIR}/src/a/a.cc
                               ${PROJECT_SOURCE_DIR}/src/b/b.cpp                                                                   
                               ${PROJECT_SOURCE_DIR}/src/c/c.cpp   

                            
                            )

3.#添加需要的第三方库

静态库里往往需要一些第三方库,这里需要链接一下,静态库需要的第三方库

target_link_libraries( com_lib ${Boost_LIBRARIES}#静态库需要的第三方库
                                ${GFLAGS_LIBRARY}
                                ${PCL_LIBRARIES}  
                                ${THIRD_PARTY_LIBS}
                     )

执行catkin_make,ROS生成库的目录是在/devel/lib/里。

使用静态库

在这里费了一大把力气,翻阅了很多博客也没有找到答案,最后偶然了解到,静态库的位置指定使用的是link_directories(${PROJECT_SOURCE_DIR}/lib)指令,我把库放在了项目目录下的lib里面,下面是导入使用的办法:

link_directories(${PROJECT_SOURCE_DIR}/lib)#指定静态库的目录地址!!

add_executable(${PROJECT_NAME}_node #可执行文件
               ${PROJECT_NAME}_node.cpp  
               src/project.cpp)


target_link_libraries(${PROJECT_NAME}_node #将库链接到可执行文件中
                      com_lib
                     )

#依赖
add_dependencies(${PROJECT_NAME}_node ${PROJECT_NAME}_generate_messages_cpp ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

版权声明:本文为u010647296原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/u010647296/article/details/118555300