[ros-users] Build Architecture Question

William Woodall wjwwood at gmail.com
Tue Feb 15 00:47:53 UTC 2011

So I have been working on using IRI's segway library to implement a segway
driver for ROS, and I have run into a situation where I don't know how to

IRI is setting up a port of their stuff for ROS, so at this point it is more
educational for me.

So, the IRI segway library relies on some of their other libraries.

My ROS Node depends on iri_segway_rmp200.
iri_segway_rmp200 depends on iricomms and iriutils.
iricomms depends on iriutils.

All of the IRI stuff is in SVN and is LGPL licensed, my stuff can be
considered MIT.  They are setup to build dynamically linked libraries (.so
on linux and .dylib on osx).

The way I see it there are a few ways to approach this setup in ROS: (Maybe
there is a 4th, correct setup)

   1. Put a script in rosdep.yaml to (svn co; make; sudo make install) each
   of the libraries from IRI.
      - This is good because the libraries are installed and no further
      configuration is required, but requires root access
      - Also, they install Find<lib>.cmake files in the cmake shared Modules
      folder, which is nice
   2. Create a ROS pkg for each library and use rosmake to build them, using
   the svn_checkout.mk make script and patches to build and install them to
   the pkg dir
      - This is nice because the libraries are contained in the ros pkg
      - But, you need to export cpp flags to include and link directories
      - How do you handle runtime dynamic linking?
   3. Download/Distribute and build the libraries in your ROS pkg and
   statically link your node to the libraries
      - Doesn't allow multiple nodes to link to a single source for the
      libraries (build the libs for each node that uses them)

So here are my questions:

   1. What is the preferred method of build architecture?
   2. How do you handle dynamic linking at runtime? (the .so file is in
   package A, and how does a binary in package B find it at runtime?)
   3. How can you handle installing and referencing Find<lib>.cmake files
   that libraries have? (use manifext.xml's <depend .../> instead, is my guess)
   4. What if any licensing concerns are there? (patches and static linking,

Sorry if some of these questions are silly, I am still learning these more
complicated build systems (rosmake/cmake).


William Woodall
Graduate Software Engineering
Auburn University
w at auburn.edu
wjwwood at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osuosl.org/pipermail/ros-users/attachments/20110214/006c7218/attachment-0002.html>

More information about the ros-users mailing list