.. _section-index410: ***************************** Upgrading from 3.0.3 to 4.1.0 ***************************** See :ref:`section-Install-Upgrade`, if you haven't already. The following sections describe how to upgrade from |me| 3.0.3 to |me| 4.1.0. They describe general, wire, and other compatibility issues between |me| 4.1.0 and previous releases. The same steps apply when migrating from 4.0.0 or 4.0.1. .. attention:: For important information on new and removed platforms and features in |me| 4.1.0, see `Supported Platforms and Programming Languages `__ and `What’s New in 4.1.0 `__ in the |me| documentation. Library Compatibility --------------------- The structure of |me| libraries changed in 4.1.0. This change affects applications migrating from |me| 3.0.3, 4.0.0, or 4.0.1. RTI provides |me| 3.0.3 (and earlier) as source code to compile into core libraries, which include all the basic functionality of |me| as well as the required operating system (OS) and network stack integration. We refer to these core libraries as an "integrated libraries." Starting with |me| 4.1.0, RTI provides two core library types: Platform Independent Libraries (PILs), which contain the basic |me| functionality, and Platform Support Libraries (PSLs), which include the OS and network stack integration for a specific platform. We refer to these as "split libraries." RTI provides PILs and PSLs as precompiled binaries, with the option to build your own PSL from source code if desired. For more information, refer to `Library types `__ in the |me| documentation. When migrating an application to |me| 4.1.0, refer to the following subsections for instructions on how to maintain compatibility with split libraries. Build the PSL (optional) ........................ RTI provides precompiled |me| PSLs for several common platforms. Refer to `Supported Platforms and Programming Languages `__ for a list of these platforms. If you plan to use |me| on a supported platform, you can use the provided PSL without building it yourself. The precompiled PSLs are located in the ``lib/`` directory of your |me| installation. Alternatively, you can build the PSL from source code included in your |me| installation. For instructions, refer to `Building the PSL `__ in the |me| documentation. Link your application ..................... Because |me| 4.1.0 uses split libraries instead of an integrated core library, you must link your application to both library types (PIL and PSL). Refer to `Link applications and libraries `__ in the |me| documentation for instructions. Transport Compatibility ----------------------- |me| 4.1.0 does not automatically register the UDP transport, due to the structure of split libraries. In order to use the UDP transport included in the PSL, you must add the following code to your application before creating a *DomainParticipant*: .. code-block:: c /* Register the UDP transport */ struct UDP_InterfaceFactoryProperty *udp_property; /* allocate and set udp_property */ RT_Registry_register(registry,NETIO_DEFAULT_UDP_NAME, UDP_InterfaceFactory_get_interface(), (struct RT_ComponentFactoryProperty*)udp_property,NULL), DDS_StringSeq_set_maximum(&participant_qos.transports.enabled_transports,1); DDS_StringSeq_set_length(&participant_qos.transports.enabled_transports,1); *DDS_StringSeq_get_reference(&participant_qos.transports.enabled_transports,0) = DDS_String_dup("_udp"); DDS_StringSeq_set_maximum(&participant_qos.discovery.enabled_transports,1); DDS_StringSeq_set_length(&participant_qos.discovery.enabled_transports,1); *DDS_StringSeq_get_reference(&participant_qos.discovery.enabled_transports,0) = DDS_String_dup("_udp://"); DDS_StringSeq_set_maximum(&participant_qos.user_traffic.enabled_transports,1); DDS_StringSeq_set_length(&participant_qos.user_traffic.enabled_transports,1); *DDS_StringSeq_get_reference(&participant_qos.user_traffic.enabled_transports,0) = DDS_String_dup("_udp://");