Chapter 9 Windows Platforms
This release supports the Windows platforms in Table 9.1 .
Table 9.1 Supported Windows Platforms in Connext 7.3.0 LTS
CPU |
Visual Studio® Version |
RTI Architecture |
Supported Target OS |
Minimum MSVC++ Redistributable |
.NET Version |
JDK Version |
---|---|---|---|---|---|---|
x64 |
VS 2017 Update 2, |
x64Win64VS2017 |
Windows 10, 11 Windows Server 2012 R2 - 2022 |
Microsoft Visual C++ Redistributable for Visual Studio 2017 for x64 |
.NET Standard 2.0 |
AdoptOpenJDK 17.0.6 |
Arm v8 |
VS 2022 |
arm64Win64VS2022 |
Windows 11 |
Microsoft Visual C++ Redistributable for Visual Studio 2022 for Arm v8 |
||
The following rows show custom-supported target platforms, only available on demand. |
||||||
x64 |
VS 2015 Update 3 |
x64Win64VS2015 (Custom support) |
Windows 10 Windows Server 2012 R2 - 2022 |
Microsoft Visual C++ 2015 Redistributable Update 3 for x64 |
.NET Standard 2.0 |
AdoptOpenJDK 17.0.6 |
x86 |
VS 2015 Update 3 |
i86Win32VS2015 (Custom support) |
Windows 10 Windows Server 2016 |
Microsoft Visual C++ 2015 Redistributable Update 3 for x86 |
||
VS 2017 Update 2, |
i86Win32VS2017 (Custom support) |
Microsoft Visual C++ 2017 Redistributable Update 3 for x86 |
For a list of Windows OS versions supported by your Visual Studio version, please see official Microsoft documentation.
Note regarding C# API Support: The C# API is supported on Windows 10 systems, but it doesn't support Visual Studio 2015 for development. Development is supported on Visual Studio 2017 or newer, Visual Studio Code, and the .NET command-line interface. For more information on .NET, see the Connext C# API Reference.
9.1 Building Applications for Windows Platforms
Before starting to build your Connext application, make sure that:
- A supported version of Visual Studio is installed on the machine you are using to build your application (see Table 9.1 above), and you have installed a valid SDK for your target platform.
- You have installed Connext and an RTI architecture package that supports your desired target platform on the build machine. You can find more instructions in the RTI Connext Getting Started Guide.
Note for Windows on Arm architectures: There is no Arm64 host installer. If you want to link your application against the dynamic version of the Connext libraries, you will need to install the x64 host and the target package on the target machine, or manually copy to the target the Connext installation folder with the desired libraries installed.
- You have set up your build environment following the basic instructions in Chapter 2 Building Applications—Notes for All Platforms
9.2 Configuring the Build of Your Connext Application
To compile a Hello World application with Connext, we recommend starting with one of the VS Project examples provided with Connext or generating an example using RTI Code Generator (rtiddsgen).
If you want to create your own project files from scratch, or build your application without using a project file, follow these steps:
- Set up your build environment following the basic instructions in Chapter 2 Building Applications—Notes for All Platforms
- Add the path to your Connext installation folder to a environment variable called NDDSHOME:
set NDDSHOME=<Path to your connext installation folder>
- Include these additional include directories (/I)
- $(NDDSHOME)\include
- $(NDDSHOME)\include\ndds
- Include the following path in your PATH environment variable or as an additional Libpath (/LIBPATH):
- $(NDDSHOME)\lib<architecture>
- Link against the Windows C Run-Time Libraries. All Connext libraries must link against the dynamic Windows C Run-Time (CRT).
- Specify the runtime library to use, based on the Connext library version you want to link against:
- If you are using a Release version: Multithread-specific and DLL-specific (/MD)
- If you are using a Debug version: Multithread-specific and DLL-specific debug (/MDd)
- Remove the following default libraries from the list of libraries to be searched for when resolving external references: (/NODEFAULTLIB)
- libcmtd
- libcmt
- If you want to use the MFC library in you application, you must link against the dynamic version. (If you use the static version, your Connext application may stop receiving DDS samples once the Windows sockets are initialized.)
- Specify that the linker should use the required RTI and system libraries, and the compiler flags from Table 9.2 Building Instructions for Windows Architectures , depending on the version of the libraries you plan to link against. Make sure you are consistent in your use of static (.lib), dynamic (.dll), debug and release versions of the libraries. Do not link both static and dynamic libraries. Similarly, do not mix release and debug libraries.
API |
Library |
Required |
Required |
|
C |
Static |
nddscorez.lib |
netapi32.lib |
WIN32_LEAN_AND_MEAN WIN32
If linking against dynamic RTI libraries, add NDDS_DLL_VARIABLE If linking against a static RTI libraries and using the RTI Security Plugins, add RTI_STATIC |
Static |
nddscorezd.lib |
|||
Dynamic |
nddscore.lib |
|||
Dynamic |
nddscored.lib |
|||
C++ |
Static |
nddscorez.lib nddscppz.lib rticonnextmsgcppz.lib |
netapi32.lib |
WIN32_LEAN_AND_MEAN WIN32
If linking against dynamic RTI libraries, add NDDS_DLL_VARIABLE If linking against a static RTI libraries and using the RTI Security Plugins, add RTI_STATIC |
Static |
nddscorezd.lib nddscppzd.lib rticonnextmsgcppzd.lib |
|||
Dynamic |
nddscore.lib nddscpp.lib rticonnextmsgcpp.lib |
|||
Dynamic |
nddscored.lib nddscppd.lib rticonnextmsgcppd.lib |
|||
Java |
Release |
nddsjava.jar |
N/A |
N/A |
Debug |
nddsjavad.jar |
9.2.1 Additional Libraries for Other Features
9.2.1.1 Libraries Required for Distributed Logger
RTI Distributed Logger is supported on all Windows platforms. Table 9.3 Additional Libraries for using RTI Distributed Logger lists the additional libraries you will need to use Distributed Logger.
Language |
Static3 |
Dynamic4 |
||
Release |
Debug |
Release |
Debug |
|
C |
rtidlcz.lib |
rtidlczd.lib |
rtidlc.lib |
rtidlcd.lib |
C++ |
rtidlcz.lib |
rtidlczd.lib |
rtidlc.lib rtidlcpp.lib |
rtidlcd.lib rtidlcppd.lib |
Java |
N/A |
N/A |
distlog.jar |
distlogd.jar |
9.2.1.2 Libraries Required for Monitoring
To use the Monitoring APIs, reference the libraries in Table 9.4 Additional Libraries for Using Monitoring.
Make sure you are consistent in your use of static, dynamic, debug and release versions of the libraries. For example, if your Connext application is linked with the static release version of the Connext libraries, you will need to also use the static release version of the monitoring library. Do not link both static and dynamic libraries. Similarly, do not mix release and debug libraries.
If you are statically linking your application with DDS libraries and you want to add monitoring to your application, you will also need to statically link the monitoring library. The library cannot be loaded dynamically strictly through the QoS profile because it also depends on DDS to publish its data. Therefore, it depends on DDS; the DDS functionality would cause duplicate symbols to be found, causing the process to terminate.
Library Format |
Monitoring Libraries5 |
Dynamic Release |
rtimonitoring.lib |
Dynamic Debug |
rtimonitoringd.lib |
Static Release |
rtimonitoringz.lib |
Static Debug |
rtimonitoringzd.lib |
9.2.1.3 Libraries Required for Real-Time WAN Transport
If you choose to use Real-Time WAN Transport, you must download and install a separate package that contains the transport libraries.
Using Real-Time WAN Transport requires one of the libraries in 9.2.1 Additional Libraries for Other Features. Select the file appropriate for your chosen library format.
Library Format |
Real-Time WAN Transport Libraries6 |
Dynamic Release |
nddsrwt.lib |
Dynamic Debug |
nddsrwtd.lib |
Static Release |
nddsrwtz.lib |
Static Debug |
nddsrwtzd.lib |
For details on the OpenSSL libraries, see 9.2.3 Location of OpenSSL Libraries.
9.2.1.4 Libraries Required for RTI TCP Transport
To use the TCP Transport APIs, reference the libraries in Table 9.6 Additional Libraries for Using RTI TCP Transport APIs.
Library Format |
RTI TCP Transport Libraries7 |
Dynamic Release |
nddstransporttcp.lib |
Dynamic Debug |
nddstransporttcpd.lib |
Static Release |
nddstransporttcpz.lib |
Static Debug |
nddstransporttcpzd.lib |
If you are also using RTI TLS Support, see Table 9.7 Additional Libraries for using RTI TCP Transport APIs with TLS Enabled. (Select the files appropriate for your chosen library format.)
Library Format |
RTI TLS Libraries8 |
OpenSSL Libraries |
System Libraries |
---|---|---|---|
Dynamic Release |
nddstls.lib |
libssl.lib libcrypto.lib |
(none) |
Dynamic Debug |
nddstlsd.lib |
||
Static Release |
nddstlsz.lib |
libsslz.lib libcryptoz.lib |
crypt32.lib |
Static Debug |
nddstlszd.lib |
For details on the OpenSSL libraries, see 9.2.3 Location of OpenSSL Libraries.
9.2.1.5 Libraries Required for Zero Copy Transfer Over Shared Memory
To use the Zero Copy Transfer Over Shared Memory feature, reference the libraries in Table 9.8 Additional Libraries for Zero Copy Transfer Over Shared Memory.
Library Format |
Zero Copy Transfer Over Shared Memory Libraries9 |
Dynamic Release |
nddsmetp.lib |
Dynamic Debug |
nddsmetpd.lib |
Static Release |
nddsmetpz.lib |
Static Debug |
nddsmetpzd.lib |
9.2.2 How the Connext Libraries were Built
Table 9.9 Library-Creation Details for Windows Architectures shows the compiler flags that RTI used to build the Connext libraries. This is provided strictly for informational purposes; you do not need to use these parameters to compile your application. You may find this information useful if you are involved in any in-depth debugging.
The details for building user applications are in 9.1 Building Applications for Windows Platforms.
9.2.3 Location of OpenSSL Libraries
The OpenSSL libraries are installed here:
- OpenSSL .lib files are in:
<NDDSHOME>\third_party\openssl-3.0.12\<architecture>\<format>\lib. - OpenSSL .dll files are in:
<NDDSHOME>\third_party\openssl-3.0.12\<architecture>\<format>\bin.
Where:
- <architecture> is your architecture string, as listed in Table 9.1 Supported Windows Platforms in Connext 7.3.0 LTS, such as x64Win64VS2017.
- <format> is debug, release, static_debug, or static_release.
The .dll filenames have a <version> and <CPU architecture> suffix. For example, libssl-1_1-x64.dll is for OpenSSL 1.1 on an x64 CPU.
9.3 Running Your Applications
Before running a Connext application, make sure that:
- You have a valid Visual Studio Redistributable installed on the target machine; which redistributable depends on your target architecture, see Table 9.1 Supported Windows Platforms in Connext 7.3.0 LTS.
- The location of the RTI libraries for your target architecture are in the PATH environment variable as noted in Table 9.10 Running Instructions for Windows Architectures.
In some cases, when components need third-party libraries, you may need to add other locations, and set up other variables. We recommend using the provided rtisetenv_<architecture> script to set up your environment. (See Set Up Environment Variables, in the RTI Connext Getting Started Guide.)
For a detailed explanation on how to run your applications, see Run the Applications, in the RTI Connext Getting Started Guide.
RTI Architecture |
Library Format |
Environment Variables10 |
All supported Windows architectures for Java |
N/A |
Path=%NDDSHOME%\lib\<architecture>; %Path% |
All other supported Windows architectures |
Static (Release and Debug) |
None required |
Dynamic (Release and Debug) |
Path=%NDDSHOME%\lib\<architecture>; %Path% |
Debug versions of applications and the various Visual C++ DLLs are not redistributable. Therefore, if you want to run debug versions, you must have the compiler installed or manually copy the files to your target.
9.4 Support for the Modern C++ API
Connext provides two C++ APIs, which we refer to as the "Traditional C++" and "Modern C++" APIs. Both are supported on all Windows platforms.
- The Modern C++ API requires C++11 compilers or newer.
- The Traditional C++ API supports C++98 compilers or newer.
For more information on Modern C++, see "Traditional Vs. Modern C++" in the RTI Connext Core Libraries User's Manual.
9.5 Support for the .NET (C#) API
The C# API is supported on Intel x64 and Arm v8 CPUs.11 For more information on .NET, see the Connext C# API Reference.
9.6 Support for the Python API
The Python API is supported for Python 3.6 - 3.12, on Intel x64 CPUs. For more information, see the Connext Python API Reference.
9.7 Multicast Support
Multicast is supported on all platforms and is configured out of the box. That is, the default value for the initial peers list (NDDS_DISCOVERY_PEERS) includes a multicast address. See the online documentation for more information.
9.8 Transports
- Shared memory: Shared memory is supported and enabled by default. The Windows operating system manages the shared memory resources automatically. Cleanup is not required.
- UDPv4: Supported and enabled by default.
- UDPv6: Supported but disabled on architectures that use Visual Studio. The peers list (NDDS_DISCOVERY_PEERS) must be modified to support UDPv6. No Traffic Class support.
- TCP/IPv4: Supported on architectures that use Visual Studio. (This is not a built-in transport.)
9.9 Unsupported Features
These features are not supported on Windows platforms:
- Controlling CPU Core Affinity
- Setting thread names by Connext at the operating-system level in release mode
These features are not supported on Windows platforms with Arm v8 CPUs:
- Python API
- rtiddsgen server
- RTI Connector for JavaScript
See also: Supported Platforms tables in the RTI Connext Core Libraries Release Notes. These tables show which RTI products are supported for each platform.
9.10 Monotonic Clock Support
The monotonic clock (described in Configuring the Clock per DomainParticipant, in the RTI Connext Core Libraries User's Manual) is supported on all Windows platforms.
9.11 Thread Configuration
See these tables:
- Table 9.11 Thread Settings for Windows Platforms
- Table 9.12 Thread-Priority Definitions for Windows Platforms
- Table 9.13 Thread Kinds for Windows Platforms
Applicable Thread |
DDS_ThreadSettings_t |
Platform-Specific Setting |
Asynchronous Publisher, |
mask |
OS default thread type |
priority |
0 |
|
stack_size |
OS default thread stack size |
|
cpu_list |
CPU core affinity not supported |
|
cpu_rotation |
CPU core affinity not supported |
|
Database thread |
mask |
DDS_THREAD_SETTINGS_STDIO |
priority |
-3 |
|
stack_size |
OS default thread stack size |
|
cpu_list |
CPU core affinity not supported |
|
cpu_rotation |
CPU core affinity not supported |
|
Event thread |
mask |
DDS_THREAD_SETTINGS_STDIO | DDS_THREAD_SETTINGS_FLOATING_POINT |
priority |
-2 |
|
stack_size |
OS default thread stack size |
|
cpu_list |
CPU core affinity not supported |
|
cpu_rotation |
CPU core affinity not supported |
|
ReceiverPool threads |
mask |
DDS_THREAD_SETTINGS_STDIO | DDS_THREAD_SETTINGS_FLOATING_POINT |
priority |
2 |
|
stack_size |
OS default thread stack size |
|
cpu_list |
CPU core affinity not supported |
|
cpu_rotation |
CPU core affinity not supported |
Thread Kinds |
Operating-System Configuration12 |
DDS_THREAD_SETTINGS_FLOATING_POINT |
N/A |
DDS_THREAD_SETTINGS_STDIO |
|
DDS_THREAD_SETTINGS_REALTIME_PRIORITY |
|
DDS_THREAD_SETTINGS_PRIORITY_ENFORCE |
9.12 Support for 'Find Package' CMake Script
The 'Find Package' CMake script is supported on all Windows platforms except those on x86 CPUs.
For information on using this script, see 2.5 Building with CMake.
9.13 Durable Writer History and Durable Reader State Features
The Durable Writer History and Durable Reader State features have been tested with all supported Windows platforms.
9.14 Backtrace Support
To support the display of the backtrace on Windows systems, you need the Dbghelp.dll and NtDll.dll libraries. Without these libraries, the backtrace will not be available.
- To get the latest version of DbgHelp.dll, go to https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk and download Debugging Tools for Windows. Refer to “Calling the DbgHelp Library” for information on proper installation.
- NtDll.dll exports the Windows Native API. It is installed automatically during the installation of the Windows operating system.
On 32-bit Windows architectures: You must use the /Oy- optimization flag to disable "Frame-Pointer Omission" optimization.
See https://docs.microsoft.com/en-us/cpp/build/reference/oy-frame-pointer-omission?view=vs-2019.
See also Logging a Backtrace for Failures, in the RTI Connext Core Libraries User's Manual.
9.15 Support for Remote Procedure Calls (RPC)
RPC is an experimental feature available only for the C++11 API. It is supported on all Windows platforms.
See Remote Procedure Calls, in the RTI Connext Core Libraries User's Manual.
9.16 Domain ID Support
On Windows platforms, you should avoid using ports 49152 through 65535 for inbound traffic. Connext’s ephemeral ports (see Ports Used for Communication, in the RTI Connext Core Libraries User's Manual) may be within that range (see https://msdn.microsoft.com/en-us/library/windows/desktop/ms737550(v=vs.85).aspx).
With the default RtpsWellKnownPorts settings, port 49152 corresponds to domain ID 167, so using domain IDs 168 through 232 on Windows platforms introduces the risk of a port collision and failure to create the DomainParticipant when using multicast discovery. You may see this error:
RTIOsapiSocket_bindWithIP:OS bind() failure, error 0X271D: An attempt was made to access a socket in a way forbidden by its access permissions.