zoukankan      html  css  js  c++  java
  • 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问题。

     

    未定义的引用:

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

     

     

  • 相关阅读:
    Java中的Graphics2D类基本使用教程
    JSP中页面向Action传递参数的几种方式
    中英文统计
    numpy数据集练习 ----------sklearn类
    IDEA在jsp页面写out.print()代码报错
    Tag文件的创建与应用
    Intellij部署Tomcat问题
    单例测试模式中【饿汉式】与【懒汉式】的区别
    java中类与方法叙述正确的是
    下列关于异常处理的描述中,错误的是()。
  • 原文地址:https://www.cnblogs.com/zhuxuekui/p/7766013.html
Copyright © 2011-2022 走看看