Error when running routing service example

8 posts / 0 new
Last post
Offline
Last seen: 4 years 3 months ago
Joined: 07/22/2019
Posts: 11
Error when running routing service example

I'm trying to run the Routing Service example from the github repo. It compiles just fine, but when I try to run in either of the configurations I get this error: 

$ $NDDSHOME/bin/rtiroutingservice -cfgFile ../RsShapesProcessor.xml -cfgName RsShapesAggregator -DSHAPES_PROC_KIND=aggregator_adv
[/routing_services/RsShapesAggregator|START|/domain_routes/DomainRoute1|CREATE|/sessions/Session1|CREATE|/routes/SquaresAndCirclestoTriangles|CREATE] RTIOsapiLibrary_open:!open library=libshapesprocessor.so: libshapesprocessor.so: undefined symbol: _ZN3dds4core16UnsupportedErrorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE
[/routing_services/RsShapesAggregator|START|/domain_routes/DomainRoute1|CREATE|/sessions/Session1|CREATE|/routes/SquaresAndCirclestoTriangles|CREATE] ROUTERPlugin_load:!load plugin shared library:
[/routing_services/RsShapesAggregator|START|/domain_routes/DomainRoute1|CREATE|/sessions/Session1|CREATE|/routes/SquaresAndCirclestoTriangles|CREATE] ROUTERPlugin_load:shapesprocessor
[/routing_services/RsShapesAggregator|START|/domain_routes/DomainRoute1|CREATE|/sessions/Session1|CREATE|/routes/SquaresAndCirclestoTriangles|CREATE] ROUTERPlugin_getInstance:!load shared library
[/routing_services/RsShapesAggregator|START|/domain_routes/DomainRoute1|CREATE|/sessions/Session1|CREATE|/routes/SquaresAndCirclestoTriangles|CREATE] ROUTERProcessor_initialize:!get ProcessorPlugin instance
[/routing_services/RsShapesAggregator|START|/domain_routes/DomainRoute1|CREATE|/sessions/Session1|CREATE|/routes/SquaresAndCirclestoTriangles|CREATE] ROUTERProcessor_new:!init ROUTERProcessor
[/routing_services/RsShapesAggregator|START|/domain_routes/DomainRoute1|CREATE|/sessions/Session1|CREATE|/routes/SquaresAndCirclestoTriangles|CREATE] ROUTERTopicRoute_initialize:!create ROUTERProcessor
[/routing_services/RsShapesAggregator|START|/domain_routes/DomainRoute1|CREATE|/sessions/Session1|CREATE] ROUTERTopicRoute_new:!init ROUTERTopicRoute object
[/routing_services/RsShapesAggregator|START|/domain_routes/DomainRoute1|CREATE|/sessions/Session1|CREATE] ROUTERSession_createTopicRoute:!create topic route
[/routing_services/RsShapesAggregator|START|/domain_routes/DomainRoute1|CREATE|/sessions/Session1|CREATE] ROUTERSession_initialize:!create topic route
[/routing_services/RsShapesAggregator|START|/domain_routes/DomainRoute1|CREATE] ROUTERSession_new:!init router session
[/routing_services/RsShapesAggregator|START|/domain_routes/DomainRoute1|CREATE] ROUTERDomainRoute_createSession:!create router session
[/routing_services/RsShapesAggregator|START|/domain_routes/DomainRoute1|CREATE] ROUTERDomainRoute_initialize:!create router session
[/routing_services/RsShapesAggregator|START] ROUTERDomainRoute_new:!init ROUTERDomainRoute object
[/routing_services/RsShapesAggregator|START] ROUTERService_createDomainRoute:!create domain route
[/routing_services/RsShapesAggregator|START] ROUTERService_start:!create domain route
RTI_RoutingService_start:!start routing service
ROUTERServiceApp_main:!start service

 

Offline
Last seen: 3 years 3 months ago
Joined: 10/08/2018
Posts: 12

I have a similar issue when I want to use a routing service plugin. Did you manage to solve the issue? My current guess is that the rti DDS routing service is compiled with ABI 0 and my compiler uses ABI 1.

Howard's picture
Offline
Last seen: 5 days 9 hours ago
Joined: 11/29/2012
Posts: 567

Hi Andreas,

So, what is the platform (OS version + compiler version + CPU) that you're running on?  I'm guessing some sort of Linux and GCC.

If you have compiled Routing Service plugins, processors, or transformations, the compiled library must be accessible via LD_LIBRARY_PATH for the OS to find it when Routing Service tries to load it.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<directory path containing libshapesprocessor.so>

Offline
Last seen: 3 years 3 months ago
Joined: 10/08/2018
Posts: 12

Hi Howard

As the error message is:

DL Error: : [/routing_services/main|START|..... RTIOsapiLibrary_open:!open library=/usr/lib/mtr_sys//libmt-rs-plugin.so: /usr/lib/mtr_sys/libmt-idl-storage.so: undefined symbol: _ZN3dds4core23PreconditionNotMetErrorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

I assume the library was found.

On a Debian 8.4, gcc 4.9.2 (ABI 0) system we had no problem but on a Ubuntu 18.04 gcc 7.5.0 (ABI 1) system we get the before mentioned error. Therefore my guess is an ABI incopatibility.

Howard's picture
Offline
Last seen: 5 days 9 hours ago
Joined: 11/29/2012
Posts: 567

Dear Andreas,

You are likely correct in your assessment.  The Routing Service executable for LInux 64 bit was built with gcc 4.4.5, which is compatible with gcc 4.9.2.

At this time I think the only solution is to install an older version of gcc to build the plugins that you want to use with Routing Service.  I've raised this issue with our development team.  Assuming you're on a project with a support contract with RTI, you can have your designed supported user submit an issue to see if there's anything else that they can do.

Howard's picture
Offline
Last seen: 5 days 9 hours ago
Joined: 11/29/2012
Posts: 567

So, we're planning to release multiple RTI Routing Service binaries compiled with different compilers in our next release so that customers can use whichever version of a compiler that they want for their plugins and then launch a compatible Routing Service that can load it.  This will come in our next release expected in March.

In the meantime, you can try two things:

1) you can build your own Routing Service executable using the libs provided for the platform that you need to use.

You probably need to use this platform:  x64Linux4gcc7.3.0

Instructions on how to build your own Routing Service executable can be found here:

https://community.rti.com/static/documentation/connext-dds/6.0.1/doc/manuals/routing_service/usage.html#section-routing-service-library

2) this is a possible workaround that doesn't require you to build your own RS

  • Run routing service executable directly (not via the script)

$NDDSHOME/resource/app/bin/x64Linux2.6gcc4.4.5/rtiroutingservice

  • Set LD_LIBRARY_PATH=$NDDSHOME/lib/x64Linux4gcc7.3.0:$LD_LIBRARY_PATH

This forces Routing Service to use the Connext DDS libs from the x64Linux4gcc7.3.0 platform which should then be able to load your compiled plugin

Offline
Last seen: 3 years 3 months ago
Joined: 10/08/2018
Posts: 12

I executed:

export LD_LIBRARY_PATH=/opt/rti_connext_dds-6.0.0/lib/x64Linux4gcc7.3.0:$LD_LIBRARY_PATH
export NDDS_QOS_PROFILES=/var/tmp/mtr_sys/cache/MT_RTI_APPLICATION_PROFILE.xml
/opt/rti_connext_dds-6.0.0/bin/rtiroutingservice -cfgFile /var/tmp/mtr_sys/cache/RTI_ROUTING_SERVICE.xml -cfgName main -verbosity 4

But I still get the error:

DL Error: : [/routing_services/main|START|/domain_routes/ROUTE-INCOMING|CREATE|/sessions/TO_LOOPBACK|CREATE|/routes/MTR_to_ROS_INCOMING|CREATE|/outputs/Output1|CREATE] RTIOsapiLibrary_open:!open library=/usr/lib/mtr_sys//libmt-rs-plugin.so: /usr/lib/mtr_sys/libmt-idl-storage.so: undefined symbol: _ZN3dds4core23PreconditionNotMetErrorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE

Therefore, I assume the second workaround does not work. It's quite disappointing, that only the libraries are available in different versions but the "main" applications such as the routing service not.

I now try to compile the routing service as you suggested in the second workaround.

 
Howard's picture
Offline
Last seen: 5 days 9 hours ago
Joined: 11/29/2012
Posts: 567

Hi Andreas,

The workaround is to invoke the binary executable of Routing Service directly and not to use the script file located in the bin/ directory...  That script will modify the LD_LIBRARY_PATH...and undo the "fix" of the path as set directly in the environment variable.

  • Run routing service executable directly (not via the script)

$NDDSHOME/resource/app/bin/x64Linux2.6gcc4.4.5/rtiroutingservice