• Roboware 下打包成so 文件并引用


     

    一、生成.so文件

    在ros中编译.so文件,如同在vs中编译C++版的dll文件。具体步骤如下:

    步骤1:

    首先建立.h文件和一个.cpp文件(该.cpp文件就是此次封装的内容)

     

    步骤2:

    在该节点下的CMakeLists.txt文件中,如果cpp文件名为apsplan,则加入以下语句:

    Indigo:

    ## Declare a C++ library

    add_library(apsplan
      src/apsplan.cpp

    )

    Jade:

    有些版本需要加入下面这些内容:

    # add_library(lidarcenter

    # src/lidarcenter.cpp

    # )

    # add_dependencies(lidarcenter ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

    # target_link_libraries(lidarcenter

    # ${catkin_LIBRARIES}

    # )

     

    # add_library(trackingManager

    # src/trackingManager.cpp

    # )

    # add_dependencies(trackingManager ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

    # target_link_libraries(trackingManager

    # ${catkin_LIBRARIES}

    # )

     

     

     

    步骤3:

    编译整个工作空间,即可在devel文件夹下找到libapsplan.so文件

     

     

    二、使用.so文件

    .so文件的使用

    方法一:

    1、将.so文件粘贴到devel/lib文件夹下

    2、该节点的CMakeLists.txt文件下添加

    link_directories(
      ${catkin_LIB_DIRS} ~/aps/devel/lib

    )

    add_executable()

    target_link_libraries(zzbpathplanner
      ${catkin_LIBRARIES} libapsplan.so

    )

    3、正常条件apsplan.h头文件,正常在其他文件中进行引用和调用即可

     

    方法二:

    //修正一下,一般放在 devel/lib下面当重新编译的时候,需要重新删除并加载。这个比较麻烦,所以,一般我们推荐放在工程目录下方。

    放置 头文件的位置:

    include_directories( include

    ${catkin_INCLUDE_DIRS}

    )

     

    放置 库文件位置并加入到ROS头文件目录当中;并链接加入到 ROS 库目录当中:

    include_directories( lib

    ${catkin_INCLUDE_DIRS}

    )

    link_directories(${catkin_LIB_DIRS} lib)

     

     

    下面一句话的作用是把 .so文件加入到 可执行文件当中。

     

    target_link_libraries(buusensorlidar ${catkin_LIBRARIES} liblidarcenter.so)

    target_link_libraries(buusensorlidar ${catkin_LIBRARIES} libtrackingManager.so)

     

     

     

    4、其他的一些问题

    [ERROR] [1509452574.424128193]: Client [/buumonitor] wants topic /buusensorgps to have datatype/md5sum [common_msgs/buusensorgps/b45936dca092ea1d9358028750aca1c5], but our version has [common_msgs/buusensorgps/faf7be4a282d2a654e8227d65f89b918]. Dropping connection.

     

    这个原因是 数据类型不一致导致的。

    还有一种情况也会导致类型不一致,当ROS版本不一致的时候,我们在indigo 下面封装的代码在jade当中无法使用,提示 dayatype/md5sum问题。

     

    未定义的引用:

    肯定是库目录错误导致的。

     

     

  • 相关阅读:
    猴面包树果 baobab tree
    关于 韩国 申明 豆浆 和 端午 是其国家创造或历史的 看法
    初中英语课本里隐藏着的惊人秘密(转载)
    如果不出意外,我每周都会去工大打球
    新开始做wpf,随便写点经验
    当你老了 叶芝
    继承Form中的DevExpress控件不能打开编辑器Designer
    骑 自行车 从公司 到家
    LJP Little John PalmOS 1.0 Release 最新版 (RC9后的正式版)
    我的语文备忘
  • 原文地址:https://www.cnblogs.com/zhuxuekui/p/7766013.html
Copyright © 2020-2023  润新知