It isn't possible to avoid this as far as I can tell in GCC 4.7. In order for multiple modules to use the templates the templates have to be instantiated in the uORB module. We could make ORB_DEFINE instantiate the associated template, but my thinking on explicitly having a list of instantiated templates is that some we will probably never use. In general, if you are coding and you get an undefined Pub/Sub reference, you just go in and add the template instantiation. I don't think this will be too much of a burden as you won't have to do it often unless you start using a new message that no one else is using for control/ estimation.