C++ Based OPC UA Client/Server/PubSub SDK
Building the SDK and Third-Party Libraries

Building the C++ SDK with CMake offers a variety of options to configure the SDK to your needs at build time. See the page Configuring the SDK with CMake for details.

There are SDK classes providing options for product specific configuration. See Server Configuration and Client Configuration for more information.

The following pages give more general information, e.g. about generating makefiles with CMake, building third-party libraries etc.


This SDK is designed to be platform independent, i.e. it is not bound to a particular operating system or processor architecture. To achieve this, all platform dependent code is contained a so-called platform layer, an abstraction layer that encompasses platform specific files. Thus, for porting the SDK to a new platform, only the platform layer needs to be changed/adopted/rewritten, all the rest of the SDK (including the client and/or server application) remains unchanged for all platforms.

Several platform layers are already available for our SDKs. We divide these platform layers into three categories:

Actively Supported Platforms
are available as standard distribution package, permanently maintained, automatically generated and fully tested and supported with each release and service release of our SDKs.
Known To Work
platform layers available on request: Customers have used and/or are still using these platform layers, but we do not permanently fix bugs and we do not automatically generate and test these platforms. They might need minor adoption to new releases and service releases of our SDKs.
Individual Adoptions
are available through contracted development only. This is typically the case for exotic platforms and or individual solutions. There may be only a one-shot port based on a certain release of one of our SDKs.
Currently, our actively supported platforms are 32 bit and 64 bit Windows (x86) and 64 bit Linux (x86).

Binary editions of our SDKs are only available for these actively supported platforms. These binary editions contain files that are precompiled for a certain platform with a certain compiler version and can only be used on this particular platform/compiler combination. You will need the source edition of the SDK to port it another platform and/or use it with different compilers.

Windows Platform

The Windows version is generated and tested with Visual Studio 2015 Service Pack 3 hence the setup contains Visual Studio projects for the respective version and third-party components (LibXml2) that are compiled with the respective compiler.

However, due to the portable design of the SDKs, it is possible to build the source edition of the SDKs with different compilers. The Visual Studio projects are only delivered for your convenience. In our build process, we are using the portable Makefile generator CMake to generate for all supported platforms. CMake supports a large variety of different platforms, thus chances are good that you can use CMake to generate projects for the IDE of your choice. Keep in mind that if you rebuild an SDK, you will have to recompile all precompiled components (UaStack, OpenSSL and LibXml2) with your compiler and bind them against the same C runtime.

This will be described on the following pages.

Linux Platform

Linux versions always use the CMake based compilation approach and come with a simple bash script (“build.sh”) to simplify building. This script is actually doing the individual build steps (“cmake”, “make”, “make install”) for you. The third-party components are not distributed with our Linux SDKs, because they are provided by most Linux distributions. You can use the delivered CMake files to recompile the source edition of the SDK with a different GCC compiler version (e.g. a 32 bit compiler) or to cross compile the SDK for embedded systems.

In this documentation, you will find instructions about how to compile for different platforms and compilers, but we will not explain CMake in detail. For the interested reader we recommend the CMake tutorial and the CMake documentation to gain more insight into CMake.