Roboware 下打包成so 文件并引用

Posted zhuxuekui3

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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问题。

 

未定义的引用:

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

 

 

以上是关于Roboware 下打包成so 文件并引用的主要内容,如果未能解决你的问题,请参考以下文章

如何把ndk编译出来的可执行文件伪装成so打包到apk中

从零开始开发一个vue组件打包并发布到npm (把vue组件打包成一个可以直接引用的js文件)

Android怎么把一个现有工程打包成sdk

备忘:gcc在linux下打包so库并调用

如何将java打包成jar,如何将JNI的.so库和jar添加到应用APK中

android studio 怎么将so打包成jar