C++ Based OPC UA Client/Server/PubSub SDK
C++ Based OPC UA Client/Server/PubSub SDK


The UA SDK is a C++ library that supports you in writing portable C++ OPC UA Servers and Clients including Publish/Subscribe (PubSub) functionality. The UA SDK actually consists of three parts, a Server SDK, a Client SDK and the PubSub functionality. All parts use the same UA Base Library which does all the C++ encapsulation of the raw ANSI C types that are defined in the OPC UA Communication Stack by the OPC Foundation (http://www.opcfoundation.org).

For an introduction to the Server, Client and PubSub part of the SDK refer to the following pages:

The SDK contains several tutorials and examples helping developers building OPC UA applications. The documentation can be found on the following pages:

New users should have a look at the Getting Started lessons, which demonstrate how to implement the most commonly used OPC UA features:

Furthermore, we provide demo applications for the client and server side, which contain a collection of more specific OPC UA features. Please have a look at these applications when looking for example code:

UA SDK Architecture Overview

Binary SDK

The SDKs are available as binary versions for Windows and Linux. On Windows, Visual Studio 2010 SP1 and Visual Studio 2012 SP4 are supported. On Linux, GCC 4.7.2 is supported.

Source SDK

The SDKs are also available as source versions. This means that all sources of the components are included.

The Source SDK is the right solution for you if you plan to port your application to new operating systems (e.g. embedded systems), if you want to compile the libraries optimized for your CPU for maximum performance, or if you just want to have full control over your complete application.

If you compile the libraries yourself, you can choose to build static libraries or dynamic libraries. Using static libraries you can create a single binary that includes all dependencies, whereas with dynamic libraries you have more flexibility in updating individual parts of your software (e.g. update the uastack to a newer version without recompiling your whole software).


Portability is guaranteed by a concept of portability layers. The rest of the code is generic code that is independent of the operating system and can be reused without any changes. The UA Communication Stack has a portability layer that encapsulates already the most important operating system calls like Sockets, Semaphores, Mutexes, Threads, etc. The Ua Base Library is built on top of this UA Stack and does not need any further portability layer. The same applies for the software layers built on top of the UA Base Library.

The additional base modules UA PKI Library and UA XML Library are further abstraction layers that encapsulate special software components. We use the Open Source projects OpenSSL and LibXML2 to implement that functionality, because it’s good software, it’s ported already to several operating systems and they don’t have restrictive licenses like the GPL. But if your company polices don’t allow to use any Open Source for whatever reason, it’s possible to change this without a need to change anything else in the upper layers of the SDK or your application. Aside from simplifying the usage of these libraries this was main reason why we encapsulated this functionality with our own interface and don’t use the Open Source code directly in our SDKs.

Table of Contents

This manual provides a class reference and general introductions in the following sections: