A very nice feature of ROS 2 is composition. It allows to enable zero-copy / IPC across nodes.
My application requires to compose in the same process space a rosbag2::Player and a ZED ROS 2 node (either yours or a custom version of mine), and execute coordinated SVO playback.
The issue is that SVO2 format is basically from my understanding an MCAP file. A simple objdump fo libsl_zed.so in fact reveals all the symbols of a certain version (I can’t deduce what version unfortunately) of the MCAP library. The issue is that also rosbag2 has support (default) for MCAP storage. And ROS 2 packages its own version of MCAP as mcap_vendor package.
The issue is that, at runtime, the two version clash together. Calls from rosbag2_storage happen to call MCAP methods baked in your executable, or the opposite way around, depending the priority order of the shared libraries (libsl_zed.so and libmcap.so).
So my questions are:
can you disclose the version of MCAP you bake into your library?
is it an upstream version, or a custom version?
by any chance, could you consider things like namespacing at your source level the MCAP C++ symbols or do something about their visibility?
Do you have any other suggestions or things I may try to make it work?