ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

How to build ROS nodes with other libraries?

asked 2011-07-10 09:22:26 -0600

HZhu gravatar image

Hi All,

If I want to compile and build an ROS node with some other third party libraries, how & where should I modify the ROS Makefile so those third party libraries can be linked into the ROS node? Are there related online documents to which I can refer?

With Many Thanks!

edit retag flag offensive close merge delete

3 Answers

Sort by ยป oldest newest most voted
1

answered 2011-07-10 13:40:18 -0600

sam gravatar image

I can share you one example:glut

CMakeLists.txt

 cmake_minimum_required(VERSION 2.4.6)

 include($ENV{ROS_ROOT}/core/rosbuild/rosbuild.cmake)



 # Set the build type.  Options are:

 #  Coverage       : w/ debug symbols, w/o optimization, w/ code-coverage

 #  Debug          : w/ debug symbols, w/o optimization

 #  Release        : w/o debug symbols, w/ optimization

 #  RelWithDebInfo : w/ debug symbols, w/ optimization

 #  MinSizeRel     : w/o debug symbols, w/ optimization, stripped binaries

 #set(ROS_BUILD_TYPE RelWithDebInfo)



 rosbuild_init()



 #set the default path for built executables to the "bin" directory

 set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

 #set the default path for built libraries to the "lib" directory

 set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)



 #uncomment if you have defined messages

 #rosbuild_genmsg()

 #uncomment if you have defined services

 #rosbuild_gensrv()



 #common commands for building c++ executables and libraries

 #rosbuild_add_library(${PROJECT_NAME} src/example.cpp)

 #target_link_libraries(${PROJECT_NAME} another_library)

 #rosbuild_add_boost_directories()

 #rosbuild_link_boost(${PROJECT_NAME} thread)

 #rosbuild_add_executable(example examples/example.cpp)

 #target_link_libraries(example ${PROJECT_NAME})

 rosbuild_add_executable(glut_test src/glut_test.cpp)

 target_link_libraries(glut_test /usr/lib/libglut.a)

 target_link_libraries(glut_test /usr/lib/libglut.so)

glut_test.cpp

 #include <GL/glut.h>



 void renderScene(void) {    

     glClear(GL_COLOR_BUFFER_BIT);

     glBegin(GL_TRIANGLES);

     glVertex3f(-0.5,-0.5,0.0);

     glVertex3f(0.5,0.0,0.0);

     glVertex3f(0.0,0.5,0.0);

     glEnd();

     glFlush();

 }



 int main(int argc, char **argv) {

     glutInit(&argc, argv);

     glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);

     glutInitWindowPosition(100,100);

     glutInitWindowSize(320,320);

     glutCreateWindow("3D Tech- GLUT Tutorial");

     glutDisplayFunc(renderScene);

     glutMainLoop();

     return 0;

 }
edit flag offensive delete link more

Comments

1
It would be way better if you only specify "glut" as the linking here. Without the path and without the library file. CMake should figure those out as default and it is portable. Also you're giving both the static and the shared object - is this what you want?
dornhege gravatar image dornhege  ( 2011-07-10 15:30:51 -0600 )edit
Thanks a lot.
HZhu gravatar image HZhu  ( 2011-07-10 16:08:39 -0600 )edit
2

answered 2011-07-10 12:13:46 -0600

dornhege gravatar image

Depending on the library you look for, there might also be a nice CMake way (instead of hardcoding): CMake libraries.

edit flag offensive delete link more
0

answered 2011-07-10 11:45:13 -0600

Gauss Lee gravatar image

I guess you need to modify the CMakefile.txt to add more libs.

edit flag offensive delete link more

Question Tools

Stats

Asked: 2011-07-10 09:22:26 -0600

Seen: 3,250 times

Last updated: Jul 10 '11