How much is it important to set the
SHRLIB_VERSION when building support modules? I know it is set
by default to the base version when building EPICS base but it
seems it is optional when building any support modules. I did
this test in our RPM setup, I had all support modules built
using asyn 4.41 and I deployed an RPM for asyn 4.42, doing “yum
install stream-device” failed because it explicitly asked for
asyn 4.41 “libasyn.so.4.41”. I unset the variable in the base
and removed it in the support modules, it did update asyn and
installed any module that uses asyn, but I am wondering how much
this would affect compatibility and dependencies between
modules.
The importance depends on your tolerance for the IOC crashing with
weird symptoms due to a mis-match between the caller and the library
it's calling. Even though the compile-time Application Program
Interface (API) of a particular support module version is often
compatible with earlier versions, very few if any EPICS support
module authors check that new releases of a module are 100%
compatible with earlier ones at the Application Binary Interface
(ABI) level; those differences tend to be larger and more important
if the module is at least partially coded in C++, which is becoming
more common. There are tools available from the Linux community for
checking ABI compatibility between releases, but they aren't very
widely used and can make maintenance significantly more complicated.