Table of Contents
building opcua with qt

Building Qt OPC UA with open62541

building opcua with qt

Qt OPC UA is not included in the Qt installer and must be built from source.
The open62541 backend is currently the most stable and feature complete open source backend in Qt OPC UA. The open62541 library has minimal external dependencies and can be built for all supported platforms (Linux, Windows (MinGW32, MSVC 2017), Android, macOS and iOS).

NEW: Starting with the 5.12 branch, Open62541 v0.3.0 has been added to Qt OPC UA  as a 3rd party source. The open62541 plugin is now built by default without requiring any additional setup.


First of all, an installation of Qt 5.12 is required. Using the Qt installer also provides the necessary tools required to build Qt OPC UA except Perl which must be installed manually.

Compiling on Linux

git clone
cd qtopcua
git checkout 5.12
mkdir build && cd build
~/Qt/5.12.0/gcc_64/bin/qmake ..
sudo make install # sudo is not required if Qt 5.12 has been installed to a directory owned by the user

Compiling  on macOS

git clone
cd qtopcua
git checkout 5.12
mkdir build && cd build
~/Qt/5.12.0/clang_64/bin/qmake ..
sudo make install # sudo is not required if Qt 5.12 has been installed to a directory owned by the user

Compiling on Windows


Execute the following commands in the  “Qt 5.12.0 for Desktop (MinGW 5.3.0 32 bit)” shell

git clone
cd qtopcua
git checkout 5.12
mkdir build
cd build
qmake ..
mingw32-make install

MSVC 2017

Execute the following commands in the “Qt 5.12.0 64-bit for Desktop (MSVC 2017)” shell

"c:\Program Files (x86)\Microsoft Visual Studio\2017\WDExpress\VC\Auxiliary\Build\vcvarsx86_amd64.bat"
git clone
cd qtopcua
git checkout 5.12
mkdir build
cd build
qmake ..
nmake install

Compiling for Android

Additional requirements

The Android NDK is required to build for Android.

Compiling on Linux

git clone
cd qtopcua
git checkout 5.12
mkdir build && cd build
export ANDROID_NDK_ROOT=/path/to/android-ndk-r17b
~/Qt/5.12.0/android_armv7/bin/qmake ..
# When building for android_x86 (e. g. simulator), use "~/Qt/5.12.0/android_x86/bin/qmake" instead
sudo make install# sudo is not required if Qt 5.12 has been installed to a directory owned by the user

Compiling on Windows

Execute the following commands in the  “Qt 5.12.0 for Desktop (MinGW 5.3.0 32 bit)” shell

git clone
cd qtopcua
git checkout 5.12
mkdir build
cd build
set ANDROID_NDK_ROOT=c:\path\to\android-ndk-r17b
set ANDROID_NDK_HOST=windows-x86_64 # Only set this if the windows-x86_64 Android NDK is used
c:\Qt\5.12.0\android_armv7\bin\qmake ..
# When building for android_x86 (e. g. simulator), use "c:\Qt\5.12.0\android_x86\bin\qmake" instead
mingw32-make install

Compiling for iOS

Additional requirements

XCode is required to build for iOS.

Compiling on macOS

git clone
cd qtopcua
git checkout 5.12
mkdir build
cd build
~/Qt/5.12.0/ios/bin/qmake ..
sudo make install # sudo is not required if Qt 5.12 has been installed to a directory owned by the user

Creating the documentation

Use the same shell and the platform specific make tool that has been used in building the Qt OPC UA module. Building the docs on Linux or macOS requires using sudo to execute the second step if Qt has been installed to a location not writable by the current user.
make docs
make install_docs

Compiling the examples

Use the same shell and the platform specific make tool that has been used in building the Qt OPC UA module. The examples will be created in “examples” in the build directory.
export LD_LIBRARY_PATH=/path/to/Qt/5.12.0/gcc_64/lib/:$LD_LIBRARY_PATH # Linux only
make sub-examples

138 Responses

    • We are actually thinking about a server side API, but so far nothing is planed for the short to mid-term range. We currently focus on completing the client side API.

  1. Should we need to buy a commercial license for using Qt OPC UA in a closed source application ? The query is limited to Qt OPC UA( not the backend) and we are perfectly good with Open62541 which is under MPL.

    Or are we good with dynamic linking (LGPL adherence) also for this module? This query happened since QtOPC UA is part of Qt Automation which needs commercial license.

    • Unlike the rest of “Qt for Automation” which is dual licensed (commercial + GPL), Qt OPC UA is tripple licensed (commercial + LGPL + GPL).

      Which means, as long as you can comply with the requirements of the LGPL (dynamic linking amongst others), you can use Qt OPC UA without a commercial license in a closed source application.

  2. I have a Problem following the Instructions. It leaves me with: qopen62541backend.cpp:506:9: error: ‘UA_Client_runAsync’ was not declared in this scope

    Any help would be useful
    Best Regards

      • Or well, on my first try i had been on master and maybe there still is a conflict. I will try to remove any related files and try again.

        • You are welcome! As you might know Qt OPC UA is currently a tech preview. To stabilize the API we rely on user feedback (missing features, is the API good, use cases covered, …). Please let us know if Qt OPC UA works or what doesn’t work for you. We are also interested in the scenarios where the module is used.

  3. Great post!.

    I have compiled Qt OPC UA and open62541 on Linux. However, when I check the number available backends with QOpcUaProvider I get 0.

    Apparently, the Qt OPC UA compilation was fine.

    Qt Opcua:
    FreeOpcua ………………………… no
    Open62541 ………………………… yes
    Unified Automation C++ SDK …………. no

    test config.qtopcua_opcua.libraries.open62541 succeeded

    How do I have to include Qt OPC UA and open62541 in my pro file? I tried this two ways:

    1.- Include OPC UA module

    QT += opcua

    2.- Directly link to the library

    LIBS += -lQt5OpcUa

    Any idea why I am getting zero backends providers in both cases? Thanks.

    • After a successful installation of Qt OPC UA with the open62541 backend, the following file must be present:

      Does this file exist in your installation?

      To use Qt OPC UA in your project, the only additional entry required in the .pro file is “QT += opcua”.

      • Thank Jannis,

        Yes, the file exists but in a local folder, I just copied it to the appropriate Qt5 plugin folder and now it is working.

        • The file should have been copied automatically. Have you skipped the “make install” step after building the Qt OPC UA module?

  4. When i want to compile the open62541 with MSVC 2017, i get the error U1095 every time while executing nmake. What can i do?

  5. Hello there,
    I am trying to build the library and I have stumbled upon a problem I cannot overcome. I have described it here in the forums: Basically I am able to successfully build Open62541. After that I move to the opcua building phase. The problem is that after I run qmake, the script shows that Open62541 is not installed (like described in the forums). What could be the case in here? I would really appreciate all help.

    • I can’t see an obvious error in the information you posted in the forum. Please add the content of the config.log file created by qmake to the thread, it will most likely help solving the problem.

  6. Hallo,

    do I see it right that QT OPCUA API does not cover yet the case
    of server connection with username and password whereas open62541 0.3 does cover such a case already?

  7. hello, I have a problem when I try to compile Qt OPCUA on windows with open62541.

    I am following this tutorial (Building On Windows – Mingw32)

    I cannot seem to specify the path to the header open62541.h and the lib open62541.a even if I did

    set QTOPCUA_OPEN62541_INCLUDE_PATH=d:\open62541\build
    set QTOPCUA_OPEN62541_LIB_PATH=d:\open62541\build\bin
    Note that open62541 is compiled and that I do have the files open62541.h and libopen62541.a (in version 0.3) where they should be.

    The error I get is a linker problem : cannot find -lopen62541

    I added manually the open62541.h to the project files since it was not working either.

    What should I do to specify correctly the path to open62541 please ? Is there an up-to-date documentation ?

    • Which branch of the Qt OPC UA repository are you trying to build?
      The steps in this tutorial are for the 5.11 branch, dev and 5.12 use a different way to configure the external dependencies.

      • I checked, I am trying to build the 5.11 branch. Do you know if the configuration for the external dependencies changed ?

        • This should work.
          Please delete all files from your build directory, run the steps from the tutorial again and provide the content of the config.log file that has been created by qmake. Maybe this helps to determine what went wrong.

  8. Do you know how to deploy correctly an application using QT OPCUA ?
    Under Windows, with windeployqt, it adds the dll Qt5OpcUa.dll but it seems that there is no backend for the QOpcUaProvider class when running the program.
    Do I also have to add the dll to open62541 ? (which is weird because it was linked statically ?)

    • The application also needs the open62541 plugin.
      windeployqt does not copy the plugins by default, they must be copied to /plugins/opcua/ manually.

      • It works !
        I want to sincerly thank you for your time and for this tutorial, I needed to use QT OPC UA for a project and succeded thanks to your help. Without it I would probably still be banging my head on my desk.
        Again, Thank you 🙂

      • Hello, After the windeployqt command, I add the open62541_backend.dll to the folder with my .exe. But I always have a crash when I try to connect to my server. Is there other file to copy from the mingw32 folder ?

        • Hi Gauquelin,
          I came up with the same issue like you. I put the open62541_backend.dll to the release.exe folder, but the application still crash when trying to search the server.
          Finally, I find out the “open62541_backend.dll” should be placed in the folder named “opcua”. And this “opcua” folder push together with your .exe file. Then it works! You can try this way. Hopefully it also works on you.

  9. On a fresh install of Ubuntu 18.04 with Qt 5.11.1 and have tried to build for Android following your process. (Do I need to build for Linux too?)

    Everything seems okay when building but running a Qt application fails as no backends are detected.

    I noticed another comment regarding the same issue and you said to check for a “”.
    I’m able to find this file under ~/Qt/5.11.1/android_arm7/plugins/opcua

    Would you have any ideas?

    Any help would be greatly appreciated.
    Many thanks

    • The open62541 backend plugin is only built if the open62541 library is available.
      Did you see the message “Open62541 ………………………… yes” after running qmake?
      Please provide the config.log file created by qmake, it should state the reason why the plugin was not built.

  10. Your install script works also with Microsoft Visual Studio 14.0 .

    Only when doing `nmake docs` I get some problems: .

    Tested opcuaviewer with simulationsserver, everything works so far.


  11. Hello,
    I’m on a stuck with a problem and some help will be appreciated it.
    I’ve installed open62541 following this tutorial (Building On Windows – Mingw32) and seems like everything are ok, but when I try to connect my own client with a demo opcua server the QOpcUaClient::ClientState(Connecting) is always connecting state (no matter if server is running or not).

    Debugging I can see:

    Open62541AsyncBackend::connectToEndpoint(const QUrl &url) is emitting signals correctly (connected when server is running or disconnected when not) so far I think it’s ok.

    On other hand, qopcuaclientprivate.cpp:
    void pcUaClientPrivate::setStateAndError(QOpcUaClient::ClientState state, QOpcUaClient::ClientError error) seems like should receive the signals from backend class but it doesn’t work, so client state still on connecting.

    I also tried with other compiler (“Qt 5.11.1 64-bit for Desktop (MSVC 2017)”) and still happen the same.

    I’m looking forward for your feedback. Thanks in advance.

    • Hello,
      I am unable to reproduce this behavior with the 5.11 branch of Qt OPC UA on Qt 5.11.1 .

      The following minimal example produces the right state transitions (connecting -> connected -> closing -> disconnected if the server is running, connecting -> disconnected if it is not):

      int main(int argc, char *argv[])
      QCoreApplication a(argc, argv);

      QOpcUaProvider provider;
      QOpcUaClient *client = provider.createClient(“open62541”);

      QObject::connect(client, &QOpcUaClient::stateChanged, [client](QOpcUaClient::ClientState state) {
      qDebug() << "New state:" <disconnectFromEndpoint();
      if (state == QOpcUaClient::ClientState::Disconnected)


      return a.exec();

      What result do you get when running my example?

  12. Hello Jannis,

    First at all, I want to say thanks you for your feedback.

    Despite your example work perfectly, I’m afraid that I found some issue when I tried to work with my QThread class:
    – QObject::connect(client, &QOpcUaClient::stateChanged, [client](QOpcUaClient::ClientState state): “client” have to be local not a class member, it doesn’t a big deal and I change it to a local QOpcUaClient but that bring me again to the same problem client->state() still on connecting.

    In order to fix this I tried to install open65241 with option:


    Unfortulately it doesn’t work neither.

    So what do I doing in a wrong way?

    Thanks in advance.

    • Hello,

      the Qt OPC UA open62541 backend is single threaded, Qt OPC UA also does not make any promises to be thread-safe.

      Can you paste or upload your code somewhere?

  13. Hello, I am using Qt 5.5 and I tried to compile Qt OPC UA with this version. However during the compilation I got some errors from make. I think that these errors are due the fact that I am using Qt 5.5, but the recommended version is Qt 5.11 (I tried with Qt 5.11 and works fine). In this case, is it mandatory to use Qt 5.11 or with some minor changes is it possible to use Qt 5.5?

    Thank you in advance

    • Hello,
      as Qt OPC UA is a new module which has been first released with Qt 5.11, backwards compatibility was not a goal during implementation.
      The oldest Qt version I have built it for is 5.10.

      Since Qt 5.5, there have been many changes to the Qt code base and to the build system. I can’t tell how extensive the changes to the Qt OPC UA code would need to be.

      • As Qt 5.5 is a release that is still C++98, I have little hope. Porting would be a lot of work.

        • Thanks for your answers, I actually saw that there are many differences. We are thinking of moving to Qt 11.

          I’m not sure if it’s a problem with my configuration (most likely), but I had to add to “” file the path to the libraries with “QMAKE_RPATHDIR += /home//Qt/5.11.0/gcc_64/lib”, because I got errors like “:-1: warning:, needed by /home//Qt/5.11.0/gcc_64/lib/, not found (try using -rpath or -rpath-link)”

  14. Many thanks for this guide and thework on the library, it’s really helped me with incorporating OPC-UA into an Android Application.

    A few issues I’m unclear on though and I’m struggling to find much info, if you could help that would really be appreciated:

    Is it at all possible to retrieve historical data for a historised node, e.g. get the values between some start time and an end time? My server application supports this but I can’t find an easy way to get at the data from the client.

    Is there any further documentation or guidelines on calling method nodes?
    Trying to call a method on my server from client I can see the call arriving server-side and the results being prepared but but 75% of the time I’ll receive a ‘BadConnectionClosed’ on my Qt Client and an empty result.

    • We are happy if Qt OPC UA works for you!

      About historical data access. This is something that is currently still missing from the API. It might be something for Qt 5.13. It won’t be in 5.12.

      Some background: the underlying open62541 is (on 0.3) currently missing this functionality. Its available on their master, but not stable API wise (yet). So if their master settles down into an 0.4 beginning of 2019, it might be there for Qt 5.13.

    • Hello,

      Qt OPC UA does not yet support the HistoryRead service, but It’s on our to-do list.

      The water pump example and the auto tests use method calls, but generally the server should just reject the call request if it does not like the arguments that were passed. What server application are you using? Does the same problem occur if you’re running the client application on a different platform (Windows, Linux…)?
      Wireshark is able to dissect the OPC UA protocol. Does it show any indications on what went wrong?

      • Thank you both for your replies.

        The Water Pump example is one I had a look at to get started:
        Does the NodeId of CallMethod need to be the same Id as the node you’re using to make the call?

        E.g. Node1->CallMethod(, …) ?
        Node2->CallMethod(, …)
        My server is a Raspberry Pi using the Python FreeOpcUa library to implement the server. (

        The function is basically a very crude request for historical data (hence my earlier question!) that returns a string of timestamp/value pairs for a given node. It takes in strings at the moment just to test with sending parameters but these would eventually be datetimes.

        On the Server:

        add_method(, ,
        lambda id=0, s=”start”, end=”end”, node=result: *default args* [ua.Variant((), ua.VariantType.String)], *Method*
        [ua.VariantType.String, ua.VariantType.String], *In Args* [ua.VariantType.String]) *Out Arg*

        On the Client:

        node->callMethod(, args);

        args is a QVector with two elements.


        I get no errors on the server side; I see a trace for the method being received, the parameters parsed and the data for the node retrieved and returned. However on the client this rarely comes through, more often than not I’ll see:

        qt.opcua.plugins.open62541: Could not call method: BadConnectionClosed

        qt.opcua.plugins.open62541: Unable to send publish request

        I’ve tried using a completely different client (UaExpert) on Windows and connecting to my server and couldn’t recreate the issue – I’ll see if I can set my client application up on Windows or Linux and try again; will also look into Wireshark too.

        Thanks again and apologies for such a long post.

        • The output from the open62541 plugin indicates that the client closes the connection because it considers a messages received from the server as invalid. This could for example be caused by an unexpected sequence number. Wireshark will show the last message from the server before the connection is closed, the best bet is to check the headers of this message and the previous one for any strange values.
          You could also build open62541 with a more verbose log level and see if you get any output which indicates what went wrong.

  15. Hi Frank:
    I am stuck in mingw32 make (building qt opc ua)
    here is the message:
    ‘perl’ is not recognized as an internal or external command,
    operable program or batch file.
    Project ERROR: Failed to run: perl -w C:\Qt\5.11.1\mingw53_32\bin\ -mod
    ule QtOpcUa -version 5.11.2 -outdir C:/Qt/5.11.1/mingw53_32/open62541/qtopcua/bu
    ild -builddir C:/Qt/5.11.1/mingw53_32/open62541/qtopcua/build C:/Qt/5.11.1/mingw
    Makefile:41: recipe for target ‘sub-opcua-make_first’ failed
    mingw32-make[1]: *** [sub-opcua-make_first] Error 3
    mingw32-make[1]: Leaving directory ‘C:/Qt/5.11.1/mingw53_32/open62541/qtopcua/bu
    Makefile:42: recipe for target ‘sub-src-make_first’ failed
    mingw32-make: *** [sub-src-make_first] Error 2

    How can I overcome this?

    • Never mind. I managed to solved it. The code I copied from
      failed at “No backends found”.

      bool QOpcUaReader::init()
      QOpcUaProvider p;
      qDebug() << "Available backends:" << p.availableBackends();

      if (p.availableBackends().size() == 0) {
      qDebug() << "No backends found";
      return false;


      if (!m_client) {
      qDebug() <connectToEndpoint(QUrl(“opc.tcp://”));
      return true;

    • Never mind. I managed to install it. but I am unable to run the simplest code.

      QOpcUaProvider provider;
      QStringList available = provider.availableBackends();
      if (!available.isEmpty()) {
      QOpcUaClient *client = provider.createClient(available[0]);
      if (client)
      qDebug() << "Client successfully created";
      The Backend is empty. I am using Kepware OPC UA as server
      When I tried you code, the same thing No Backend availabe.
      What is backend?

  16. Hi:
    I left a message few hours ago. apparently after reading the post earlier on, I realized at the qmake .. process the message
    Open62541 ………………………… no—> which meant the qmake failed?
    my question:

    1) Build open62541 and Build Qt OPC UA are both in different directory?

    2) how can i overcome qmake failure?

    3) where is open62541 plugin after build ?


    • Hello,
      if “Open62541” is marked as “no”, this means that qmake was unable to find or use the open62541 library when running the config tests.
      Did you follow the steps for MinGW in “Build open62541”?
      If you are not sure, please do so, then erase all files from the Qt OPC UA build directory and repeat the steps listed in “Build Qt OPC UA”.
      If it still does not work, check the config.log file created by qmake. It should show the reason why the config tests failed to find or use the open62541 library.

      After a successful build, the plugin will be available in the plugins/opcua directory.

      • Hi Jannis:
        My bad. I found the mistake that I made. Well , I am start exploring it right now. I had written code (C#) as a client to opcserver. The step of connecting is quite straight forward.

        Can you point me to simple client code that connect to OPC server, and read a value or a array of addresses?

        I am able to connect to the current opc server reside in my laptop, but still figuring out how to read some addresses from the server

  17. Hi:
    Missing signal in QOpcUaNode?
    ‘dataChangeOccurred’ is not a member of ‘QOpcUaNode’
    QObject::connect(,&QOpcUaNode::dataChangeOccurred,this, &MainWindow::UpdateValue);

    • Hello,
      this signal has been added in the 5.12 branch which is currently under development.
      I guess you have found the preview version of the documentation.
      The docs for Qt OPC UA 5.11 are available here:

      The Qt OPC UA examples are a good starting point. The water pump example shows how to use read, write, monitoring and method calls, the explorer example shows the browse API.
      The browser example

  18. I seem to have an issue with my connections dropping after around ~10 minutes.

    I’m only connecting to servers and monitoring a single variable for change and then potentially requesting some additional values depending on its result – nothing taxing

    Is this something you’ve seen before? Or would you have any recommendations on how best to find the cause of this.

    My server is a Raspberry Pi running a Python Free-OPCUA Server and the Qt client is running on an Android device.

    Many thanks

    • Hi! I have the same problem here with Android.
      Running the app in windows everything is fine, but when I try on Android all updates just stop, no signals emitted for client state or node.
      Have you find a solution?

  19. I’m having some trouble with subscribing/monitoring nodes – the connection to the server will drop out after roughly 10 minutes every time.

    I’ve tried other clients (UAExpert / Prosys) and they don’t seem to drop connection, so I’m wondering what I’ve done wrong.

    Basically I have an application that subscribes to a node common to my OPC servers I then wait for it to change value and react accordingly (it looks a bit like this):

    QOpcUaNode* n = devices[deviceName]->client->node(“ns=2;s=Common-Node”);

    n->enableMonitoring(QOpcUa::NodeAttribute::Value, QOpcUaMonitoringParameters(500));

    connect(n, &QOpcUaNode::attributeUpdated,
    this, [this,deviceName](QOpcUa::NodeAttribute attr, QVariant value)
    qDebug() << "Update received on NVF for: " << deviceName;

    Checking the output I see an entry for "Open62541: Unable to Send Publish Request" (I've tried rebuilding the library with a higher log level but there's no difference) I can't seem to find any further details.

    I'm not really seeing anything on Wireshark either the packets just seem to stop.

    Would you be able to advise?

    Many thanks

      • Hi Jannis,

        Sorry for the double post, the related issue is my own actually (good find).

        Trying again today and it seems that any interaction with the server after ~10 minutes causes the connection to drop, so its probably not a specific subscription issue.

        There are some security policies to choose from on FreeOpcUa, is there a type expected by QtOpcUa / Open62541 or a way to specify?

        I’ll run it again and check the Wireshark output at the disconnect point, is there any specific I should look for? (not something I’m too familiar with)

        Thanks again

        • There is no API to do this in Qt OPC UA, renewing the secure channel is considered a detail that must be handled internally by the sdk specific plugins (open62541, unified automation).

          Did you encounter any problems with secure channel renewal with one of the plugins?

          • For automatic “secure channel renewal” you need at least one subscription to a value (ex. server status time).

            If the application only read or write value attributes the OPC UA server will disconnect after RevisedLifetime (in OpenSecureChannelResponse message). In my case after 12 Min. with a Siemens PLC.

    • I’ve got almost the exact same problem, which is simply enable monitoring and then “Disconnected” + “Unable to Send Publish Request” appears. But the issue of mine is happened just after the first time of “DataChangeOccured” that callback function is called, which is the “PublishInterval” as 500 ms.
      UaExpert and Matrikon Explorer both work perfectly with the same server.

  20. Hey Frank,
    I’ve done install the opcua libray. when i build the example(***\qt\5.11.2\mingw53_32\open62541\build\qtopcua),
    i get these errors.:
    “Project ERROR: You cannot build examples inside the Qt source tree, except as part of a proper Qt build.
    Makefile:33: recipe for target ‘sub-opcua-qmake_all’ failed
    mingw32-make: *** [sub-opcua-qmake_all] Error 3”
    I’m not familar with QT, hoping to get your help. thanks

    • Hello,
      according to the path, your build directory is located inside the Qt installation directory.
      As the error message states, this is not permitted when building examples.
      When building additional Qt modules for an existing Qt installation, the usual approach is to build them in a directory outside of the Qt installation directory. The files required to use the new module are copied to the Qt installation directory using “make install”. With such a setup, the examples can be built in the build directory that was used for the module itself.

  21. Hello,
    First of all thanks for these guidelines. They are quite helpful.
    I have followed the indicated steps to set up Qt OPC UA on linux (debian) using Qt 5.11.2.
    Everything seems to work fine, and the qmake configuration says that the open62541 plugin has been installed successfully.

    The problem I am facing occurs when attempting to create a client.
    Here is the error I get:

    So though the open62541 plugin available and found, it is failing to load. What could be the cause of this behavior?

    • Hello,
      Wordpress seems to have removed the error message from your comment.
      There are two things you could check:
      1) Run the command line ldd /path/to/Qt/5.11.2/gcc_64/plugins/opcua/ and make sure points to your open62541 installation.
      2) Run your Qt OPC UA application with the environment variable QT_DEBUG_PLUGINS set to 1 and see if there is any output related to the open62541 plugin.

      • In fact, when I run the command lld /path/to/Qt/5.11.1/gcc_64/plugins/opcua/, does not point to the open62541 installation.
        Here how it looks like: ” => not found “.
        What can then be the reason of this? And how can it be fixed?

        • This looks like your open62541 installation has somehow failed or you have installed it to a path that is not automatically searched for libraries.

      • I have followed this tutorial: “” , and I was able to fix the path to which should point to by adding in /etc/ a ‘.conf’ file with the path to the actual path open62541 installation.
        Thanks though for your availability to address my doubt!

  22. I am trying to build qtopcua 5.12 against OPEN62541 0.3 without success. 5.11 works well, but I was hoping to use features such as findServers and requestEndpoints without digging into OPEN62541. Is this configuration currently possible? Is it on a roadmap? There doesn’t even seem to be an existence test for OPEN62541 in qtopcua\src\opcua\configure.pri. (WIN 7 and 10)

    • The way to specify build parameters for Qt OPC UA has changed between Qt 5.11 and Qt 5.12.
      I have just updated this howto to show the steps necessary for building the 5.12 branch of Qt OPC UA with Qt 5.12.0.
      Please let us know if you have further problems with building and using Qt OPC UA.

      • Thank you for that. 5.12 now builds successfully on msvc. I’ll let you know how well discovery services work.

  23. Hi! Did the way to specify build parameters on linux also change? I tried to build 5.12 with OPEN62541 on linux the same way as 5.11.3, but qmake did not detect OPEN6254.

    • When building for Qt 5.12, it is important not to forget the step “git checkout 644761ff” when building open62541.
      After this commit, the install path for the open62541 header file is changed and the config test fails to detect the open62541 library.

  24. I am trying to build qtopcua using the new build scheme with open62541 as 3rd party source. I am trying to include mbedtls, to take a swipe at authentication/encryption.

    All goes well until the link step, when it complains about not finding members of the mbedtls libraries. (first one is mbedtls_md_info_from_type) Can you give me a hint as to how to link them in the qtopcua build system? The open62541 instructions no longer seem to apply.

    • You could try adding the following line in src/3rdparty/open62541.pri: LIBS += -lmbedtls -lmbedx509 -lmbedcrypto

      An API for secure connections has been added on the Qt OPC UA dev branch which is going to become Qt 5.13 soon. The open62541 plugin does not support that API yet because we are tied to open62541 v0.3.0 which does not offer client side secure connection capabilities. The uacpp plugin code already has an implementation for this and can be used as an example for how to implement the secure connection API.

      • I am thinking that I have not built the mbedtls libraries appropriately. (using qtcreator) cmake appears to find the libraries, but can’t resolve their members. DUMPBIN shows the members with a preceding underscore, which shouldn’t be an issue.

        I will explore compiling mbedtls again. The instructions (I am working on windows 7 with vs2017) fail to generate mbedcrypto and mbedx509, and I had to create the project files manually.

        I am using open62541 [master] and qtopcua [5.13]. qtopcua compiles (except for the link phase) with a change only to qopen62541subscription.cpp to work around deprecated code that has been removed in open62541 [master].

        Since the bleeding edge version of open62541 appears to support client side encryption/authentication (there is example code in the tree) I thought I would try to put a qt wrapper around it and and see if it works. We require authentication and encryption.

    • In addition to what Jannis said. We might not be able to get open62541 client security into Qt OPC UA proper (aka. a released version) before open62541 has settled down into an 0.4 branch (or a release candidate at least), but we see the need for having this feature. One way could be to have a “known to work” patch in gerrit (open62541 users need to build from source anyways). We are happy to collaborate on that.

  25. Thank you for great work!

    Is there any roadmap for Qt OPC UA features and dates?

  26. I still haven’t given up on adding security to qtopcua; I got sidetracked just after I figured out how to set up a security infrastructure and compiled against mbedtls. Still gonna do it.
    I am stuck trying to deploy an app. Plain vanilla Qt opcua, built in qt creator. It simply accesses the library, gets a list of endpoints, then creates a new QOpcUaProvider, and attempts to load a backend, connect a server, then update the server periodically from a Reflective memory network.
    It works perfectly in qcreator, either run or debug, but as a standalone (accompanied by dependencies provided by windeployqt.exe) the provider does not report any backends. (verified with printf) I put a delay (x1000 sqrt(f) so it doesn’t kill the thread) in, but doesn’t appear to be a timing issue. Is there or are there some dependency(ies) that windeployqt.exe might be missing that qtcreator provides in it’s configuration? Could it be a visual studio issue? ( it seems to work on a VS2017 system if I build it there, but not when compiled against VS2015) Unfortunately my target platform is 2015, and cannot have a qt install or 2017.

    The dev machine has qtopcua built with VS2015

    I have a couple of servers built the same way (based loosely on the waterpump example) that stand up and run just fine.
    Any suggestions you can provide would be most appreciated.

    • I guess windeployqt doesn’t copy the plugins (the open62541-backend is a plugin). Please check the target folder of the deployment if you find the backend there.

      btw. Christmas comes early this year:
      This patch is a “fork” which implements the security API with open62541 based on their master. We currently can’t merge it as we need a proper release of open62541, but its still something you can already check out and test. We are looking forward to your feedback.

  27. Sorry for the delay getting back to you. After reading the docs at a light bulb went off, and I manually included the plugin into the windeployqt bundle and things work as they should.
    I guess now I should figure out how to apply a patch so I can check out the security preview, but right now I am having an issue porting an app from windows to linux (centos). Discovery works OK, but my client connect times out.

  28. Hello,

    I have troubles when building the sources on Windows with MinGW32.
    I installed Qt 5.13.0, Perl 5.3.1 and MinGW32 7.3.

    When building sources with mingw32-make, I get an Invalid argument error. With details : [Makefile:45: sub-opcua-make_first] Error 126.

    It may be related to an installation issue but I can’t see which one in particular.

    Thank you for your help.

    • Hello,

      is this the entire output, or is there more that could indicate what went wrong?
      Are you able to call perl from the shell you are using to build Qt OPC UA without specifying the full path to the executable?

  29. Hello Frank,
    I want use freeopcua, I read this blog for reference.
    Firstly, I use “vckpg install freeopcua” to get freeopcua lib and dll.
    Then,I use “Qt 5.11.0 32-bit for Desktop (MSVC 2015) “to compile Qtua plugin.The cmd like that “cd qtopcua
    mkdir build
    cd build
    set INCLUDE=%INCLUDE%;C:\vcpkg-master\installed\x86-windows\include
    set LIB=%LIB%;C:\vcpkg-master\installed\x86-windows\lib
    qmake ..
    nmake install”
    I get the plugin successly .At last , I try the plugin,
    —– QOpcUaClient *m_pOpcUaClient = m_pOpcUaProvider->createClient(lstBackends.first())
    the m_pOpcUaClient is null, and the log is
    qt.opcua: Failed to load OPC UA plugin: “freeopcua”
    qt.opcua: Available plugins: (“freeopcua”).
    What should i do with this error?

    • Thank you for your interest. Please avoid using the freeopcua backend. It was our initial backend end has been removed with Qt5.12. Please consider switching to a recent version of Qt OPC UA and the open62541-backend. Note that recent versions of Qt OPC UA bundle open62541 so it is much easier to install. Also note that the open62541-backend has much more features then the freeopcua backend ever had.

  30. Thank for your reply .Actually I cannot get any endpoints from the OPC UA server with the lastest open62541 backend.The endpointArraySize in The function “static UA_StatusCode getEndpoints(UA_Client *client) ” is 0.
    But the freeopcua can get endpoints and nodes from the same UA server .So i had to use freeopcua in my code if i cannot solve the problem on open62541

  31. Besides i have solved this problem. Because i forgot set boost environment variable.Setting BOOST_ROOT on environment variable can make qt load plugin successfully .
    I still have doubts on this which open62541 cannot find endpoints in UA server

  32. Hello, thanks for so much information. Now I can run Qt opcua on Ubuntu desktop(both programing and execution on same PC with Ubuntu).
    But I want to run this code on embedded Linux what should I do? It there some special settings? Or only should I recompile source code under cross compilation environment?

  33. Hello,

    I am having trouble getting it to work correctly. I followed your steps ,QtopcUa build correctly and a project including it compiles. Despite this i have no avaiable backends, even though in my qmake step it recognized it.

    Thank you for your help

  34. Hello,
    I’m trying to run my application on a virtual machine, but open62541 can’t find any backends. It works in Qt on my computer and as a standalone app. However, if I copy my app and all DLLs to the virtual machines, my app cannot find any backends. For OPC UA I copied open62541_backend.dll, Qt5OpcUa.dll and declarative_opcua.dll.

    • Hello,
      did you just copy all DLLs to the same directory? Qt looks for plugins in certain places, the open62541 plugin should be recognized if you place it inside plugins/opcua/.

      • Hello Jannis,
        I used windeployqt for my standalone app, but I had to copy the files open62541_backend.dll and declarative_opcua.dll.

      • Now I installed Qt and the QtOPCUA Plugin on the virtual machine and finally it works! Any ideas for the reason?

  35. Hello Jannis/Frank,

    By following the steps on Compiling on Windows, I’m able to compile/build and install Qt Opc UA on Windows with MSVC compiler, I’m also able to compile/build using Mingw32-Make as well, but the error comes when I use mingw32-make install, some error messages happening as attached:

    mingw32-make[2]: Entering directory 'C:/Qt/5.14.1/mingw73_32/qtopcua/build/src/opcua'
    copy /y ..\..\lib\Qt5OpcUa.dll C:\Qt\5.14.1\mingw73_32\bin\Qt5OpcUa.dll
    1 file(s) copied.
    C:\Qt\5.14.1\mingw73_32\bin\qmake.exe -install sed -e "s,C:/Qt/5.14.1/mingw73_32/qtopcua/build/lib,$$[QT_INSTALL_LIBS],g" -e "s,C:\\\\Qt\\\\5.14.1\\\\mingw73_32\\\\qtopcua\\\\build\\\\lib,$$[QT_INSTALL_LIBS],gi" -e "s,C:/Qt/5.14.1/mingw73_32/lib,$$[QT_INSTALL_LIBS],g" -e "s,C:\\\\Qt\\\\5.14.1\\\\mingw73_32\\\\lib,$$[QT_INSTALL_LIBS],gi" ..\..\lib\Qt5OpcUa.prl > C:\Qt\5.14.1\mingw73_32\lib\Qt5OpcUa.prl
    C:\Qt\5.14.1\mingw73_32\bin\qmake.exe -install sed -e "s,C:/Qt/5.14.1/mingw73_32/qtopcua/build/lib,C:/Qt/5.14.1/mingw73_32/lib,g" -e "s,C:\\\\Qt\\\\5.14.1\\\\mingw73_32\\\\qtopcua\\\\build\\\\lib,C:\\\\Qt\\\\5.14.1\\\\mingw73_32\\\\lib,gi" ..\..\build\lib\pkgconfig\Qt5OpcUa.pc > C:\Qt\5.14.1\mingw73_32\lib\pkgconfig\Qt5OpcUa.pc
    ..\..\build\lib\pkgconfig\Qt5OpcUa.pc: No such file or directory
    mingw32-make[2]: *** [Makefile:3431: install_target] Error 1
    mingw32-make[2]: Leaving directory 'C:/Qt/5.14.1/mingw73_32/qtopcua/build/src/opcua'
    mingw32-make[1]: *** [Makefile:64: sub-opcua-install_subtargets] Error 2
    mingw32-make[1]: Leaving directory 'C:/Qt/5.14.1/mingw73_32/qtopcua/build/src'
    mingw32-make: *** [Makefile:65: sub-src-install_subtargets] Error 2

    Is there anything I missed?

  36. Hallo,
    ich habe gerade einen Server bei dem in einigen Nodes Umlaute im BrowseName(n) enthalten sind. Wird für diese Nodes ein QOpcUaNode::readAttributes ausgelöst, dann sind beim Eintreffen des Signals OpcUaNode::attributeReadFinished alle Attribute des Nodes ungültig.
    Dies kann man auch mit dem opcuaviewer-Sample nachvollziehen. Dort steht dann als BrowseName kein Name drin, die NodeClass ist Undefined usw…
    Was kann ich dagegen tun?

  37. Hello,

    I am a beginner of Qt. My system is Windows 10 64bit with Qt: 5.14.0
    I followed the process mentioned above. When I run “mingw32-make”, it pops out the fatel error: openssl/asn1.h: No such file or directory #include
    I searched a lot of solution to try to fix it. But still cannot solve it. I think some of users have same issue like I have. But the information is few.
    When I have almost ran out of ideas, I uninstalled the Qt: 5.14.0, and install the Qt: 5.12.0. And I do the exactly the same procedures like I did with Qt: 5.14.0. Eventually, succeeded!
    I don’t know why. But now is good for me. So I just share some information and see if you have any idea of what happened to me.
    Thanks in advance.

    • Hello,

      the 5.14 branch of Qt OPC UA has been extended with GDS support which requires OpenSSL 1.1 headers and libs to build.
      If this is not available, the build will fail.

      • I searched some information about qt 5.14 branch. There is an OpenSSL issue in this qt version. The installer doesn’t set up OpenSSL environment. So how can I build the OpenSLL 1.1 into the qt 5.14 branch manually. It is awesome if you can explain more detail about the process. As you know I am a beginner. But I will still try my best to fix it as well.

        • Just like when building Qt itself, you need to pass the location of the OpenSSL headers and libraries manually.
          Assuming you have installed OpenSSL to /path/to/openssl/, you can specifiy the locations as follows when running qmake:
          qmake /path/to/qtopcua -- QMAKE_CXXFLAGS="-I /path/to/openssl/include -L /path/to/openssl/lib"

  38. Hello, maybe somebody has the same issue.
    I just updated from 5.12.8 to 5.15.0. If I am using QML, I can connectToEndpoint only at the first time and all works just fine, but if I disconnectFromEndpoint, and try to connectToEndpoint again, connection status says connected, but ValueNodes don’t update anymore.

    • Could you please file a bug at against the Qt OPC UA component? Thank you

  39. Hello! Great tutorial!
    I was able to compile the windows version + docs + example with mingw 8.1.0 32bit, QT5.15.0, no problems here.
    But I also need the Android version and it’s not working using NDK 21.3:

    cd src\ && ( if not exist Makefile C:\Qt\5.15.0\android\bin\qmake.exe -o Makefile C:\Qt\5.15.0\mingw81_32\qtopcua\src\ “QMAKE_CXXFLAGS=-I C:\OpenSSL-Win64\include -L C:\OpenSSL-Win64\lib” ) && mingw32-make -f Makefile
    mingw32-make[1]: Entering directory ‘C:/Qt/5.15.0/mingw81_32/qtopcua/src’
    cd opcua\ && ( if not exist Makefile C:\Qt\5.15.0\android\bin\qmake.exe -o Makefile C:\Qt\5.15.0\mingw81_32\qtopcua\src\opcua\ “QMAKE_CXXFLAGS=-I C:\OpenSSL-Win64\include -L C:\OpenSSL-Win64\lib” ) && mingw32-make -f Makefile
    Project MESSAGE: perl -w C:\Qt\5.15.0\android\bin\ -module QtOpcUa -version 5.15.0 -outdir C:/Qt/5.15.0/mingw81_32/qtopcua -builddir C:/Qt/5.15.0/mingw81_32/qtopcua C:/Qt/5.15.0/mingw81_32/qtopcua
    = C:/Qt/5.15.0/mingw81_32/qtopcua
    = C:/Qt/5.15.0/mingw81_32/qtopcua
    = C:/Qt/5.15.0/mingw81_32/qtopcua
    QtOpcUa: created fwd-include header(s) for /src/opcua/ { qopcuaglobal.h (1) }
    QtOpcUa: created fwd-include header(s) for /src/opcua/client/ { qopcuaaddnodeitem.h (2), qopcuaaddreferenceitem.h (2), qopcuaapplicationdescription.h (2), qopcuaapplicationidentity.h (2), qopcuaapplicationrecorddatatype.h (2), qopcuaargument.h (2), qopcuaattributeoperand.h (2), qopcuaauthenticationinformation.h (2), qopcuaaxisinformation.h (2), qopcuabackend_p.h (1), qopcuabinarydataencoding.h (2), qopcuabrowsepathtarget.h (2), qopcuabrowserequest.h (2), qopcuaclient.h (2), qopcuaclient_p.h (1), qopcuaclientimpl_p.h (1), qopcuacomplexnumber.h (2), qopcuacontentfilterelement.h (2), qopcuacontentfilterelementresult.h (2), qopcuadeletereferenceitem.h (2), qopcuadoublecomplexnumber.h (2), qopcuaelementoperand.h (2), qopcuaendpointdescription.h (2), qopcuaerrorstate.h (2), qopcuaeuinformation.h (2), qopcuaeventfilterresult.h (2), qopcuaexpandednodeid.h (2), qopcuaextensionobject.h (2), qopcuagdsclient.h (2), qopcuagdsclient_p.h (1), qopcualiteraloperand.h (2), qopcualocalizedtext.h (2), qopcuamonitoringparameters.h (2), qopcuamonitoringparameters_p.h (1), qopcuamultidimensionalarray.h (2), qopcuanode.h (2), qopcuanode_p.h (1), qopcuanodecreationattributes.h (2), qopcuanodecreationattributes_p.h (1), qopcuanodeids.h (1), qopcuanodeimpl_p.h (1), qopcuapkiconfiguration.h (2), qopcuaqualifiedname.h (2), qopcuarange.h (2), qopcuareaditem.h (2), qopcuareadresult.h (2), qopcuareferencedescription.h (2), qopcuarelativepathelement.h (2), qopcuasimpleattributeoperand.h (2), qopcuatype.h (1), qopcuausertokenpolicy.h (2), qopcuawriteitem.h (2), qopcuawriteresult.h (2), qopcuaxvalue.h (2) }
    QtOpcUa: created fwd-include header(s) for /src/opcua/core/ { qopcuaplugin.h (2), qopcuaprovider.h (2) }
    QtOpcUa: created fwd-include header(s) for /src/opcua/x509/ { openssl_symbols_p.h (1), qopcuakeypair.h (2), qopcuakeypair_p.h (1), qopcuax509certificatesigningrequest.h (2), qopcuax509certificatesigningrequest_p.h (1), qopcuax509distinguishedname.h (2), qopcuax509extension.h (2), qopcuax509extension_p.h (1), qopcuax509extensionbasicconstraints.h (2), qopcuax509extensionextendedkeyusage.h (2), qopcuax509extensionkeyusage.h (2), qopcuax509extensionsubjectalternativename.h (2), qopcuax509utils_p.h (1), qsslsocket_openssl11_symbols_p.h (1), qsslsocket_opensslpre11_symbols_p.h (1) }
    QtOpcUa: created version header
    QtOpcUa: created master header
    QtOpcUa: created headers.pri file
    mingw32-make[2]: Entering directory ‘C:/Qt/5.15.0/mingw81_32/qtopcua/src/opcua’
    mingw32-make -f Makefile.Armeabi-v7a all
    mingw32-make[3]: Entering directory ‘C:/Qt/5.15.0/mingw81_32/qtopcua/src/opcua’
    C:\Users\foliveira15\AppData\Local\Android\Sdk\ndk-bundle/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++ -c -I C:\OpenSSL-Win64\include -L C:\OpenSSL-Win64\lib -O2 -mthumb -Oz -std=c++1z -fvisibility=hidden -fvisibility-inlines-hidden -fno-exceptions -Wall -W -Wdate-time -Winconsistent-missing-override -D_REENTRANT -fPIC -DQT_NO_LINKED_LIST -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_BUILD_OPCUA_LIB -DQT_BUILDING_QT -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x050000 -DQT_DEPRECATED_WARNINGS_SINCE=0x060000 -DQT_NO_FOREACH -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_NETWORK_LIB -DQT_CORE_LIB -I. -I..\..\include -I..\..\include\QtOpcUa -I..\..\include\QtOpcUa\5.15.0 -I..\..\include\QtOpcUa\5.15.0\QtOpcUa -IC:\Qt\5.15.0\android\include\QtNetwork\5.15.0 -IC:\Qt\5.15.0\android\include\QtNetwork\5.15.0\QtNetwork -IC:\Qt\5.15.0\android\include\QtCore\5.15.0 -IC:\Qt\5.15.0\android\include\QtCore\5.15.0\QtCore -IC:\Qt\5.15.0\android\include -IC:\Qt\5.15.0\android\include\QtNetwork -IC:\Qt\5.15.0\android\include\QtCore -I.moc\armeabi-v7a -Ic:\utils\openssl-android-master\include -IC:\Qt\5.15.0\android\mkspecs\android-clang -o .obj\armeabi-v7a\qopcuaprovider.obj core\qopcuaprovider.cpp
    clang++: error: unsupported option ‘-fPIC’ for target ‘x86_64-w64-windows-gnu’
    mingw32-make[3]: *** [Makefile.Armeabi-v7a:2047: .obj\armeabi-v7a\qopcuaprovider.obj] Error 1
    mingw32-make[3]: Leaving directory ‘C:/Qt/5.15.0/mingw81_32/qtopcua/src/opcua’
    mingw32-make[2]: *** [Makefile:48: armeabi-v7a-all] Error 2
    mingw32-make[2]: Leaving directory ‘C:/Qt/5.15.0/mingw81_32/qtopcua/src/opcua’
    mingw32-make[1]: *** [Makefile:49: sub-opcua-make_first] Error 2
    mingw32-make[1]: Leaving directory ‘C:/Qt/5.15.0/mingw81_32/qtopcua/src’
    mingw32-make: *** [Makefile:50: sub-src-make_first] Error 2

    Any ideas?

  40. Thank you so much for the installation guide.
    I successfully installed in ubuntu, but when I tried to run the examples, it said “qopen62541.h” not found. I read through the Q&A, and could not find the same problem.
    You also mentioned that “The open62541 plugin is now built by default without requiring any additional setup.”
    So I am not sure if something is missing.
    Thank you very much for your help in advance! 😀

    • Okay, somehow the plugin was not installed. I manually copied “qopen62541.h” to the project I wanna build.
      Then I found that “open62541.h” is missing, I dunno why, but I separately installed open62541, and “open62541.h” showed up.
      Then open62541.pri is missing…. and I dunno how to fix it yet.
      Do you have the solution? Thank you!

      • I guess the error happens while building the simulation server for the waterpump example.

        Unfortunately, the mechanism in only works if you are using the distributed version from Qt for automation. Please try to change the path in line 10 of to the absolute path of your qtopcua repository clone.

  41. Hello I´m trying to compile it in mvs2017 64 with open62541. Qt version is 5.12.7 and pointing to qtopcua branch 5.12. When run qmake everything is working correctly, Open62541 y detected correctly. But when launch nmake I get a QT building error:
    c:\qt\5.12.7\msvc2017_64\qtopcua\src\opcua\client\qopcuabinarydataencoding.h(417): error C2664: ‘QString QString::arg(const QString &,int,QChar) const’: el argumento 1 no puede convertirse de ‘QStringRef’ a ‘qlonglong’
    c:\qt\5.12.7\msvc2017_64\qtopcua\src\opcua\client\qopcuabinarydataencoding.h(417): note: No hay disponible ning£n operador de conversi¢n definido por el usuario que pueda realizar esta conversi¢n, o bien no se puede llamar al operador

    Do you have the solution? Thank you!

  42. I installed qt 5.15.0 on Windows 10
    I checked out branch 5.15.0 of qtopcua and run qmake..
    then i added the following 3 lines to .qmake.conf
    INCLUDEPATH +=”C:\Qt\Tools\OpenSSL\Win_x64\include”
    LIBS +=”C:\Qt\Tools\OpenSSL\Win_x64\lib\libssl.lib”
    LIBS +=”C:\Qt\Tools\OpenSSL\Win_x64\lib\libcrypto.lib”
    Then i run nmake and compile with MSVC 2015 64 bit
    It compiles well but then i get the following linker error:

    Code wird generiert…
    link /NOLOGO /DYNAMICBASE /NXCOMPAT /DEBUG /OPT:REF /INCREMENTAL:NO /DLL /SUBSYSTEM:WINDOWS /VERSION:5.15 /MANIFEST:embed /OUT:..\..\lib\Qt5OpcUa.dll @C:\Users\U47851\AppData\Local\Temp\nm879A.tmp
    Bibliothek “..\..\lib\Qt5OpcUa.lib” und Objekt “..\..\lib\Qt5OpcUa.exp” werden erstellt.
    openssl_symbols.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol “”__declspec(dllimport) public: __cdecl QBasicMutex::QBasicMutex(void)” (__imp_??0QBasicMutex@@QEAA@XZ)” in Funktion “”void __cdecl `dynamic initializer for ‘symbolResolveMutex”(void)” (??__EsymbolResolveMutex@@YAXXZ)”.
    ..\..\lib\Qt5OpcUa.dll : fatal error LNK1120: 1 nicht aufgelöste Externe
    NMAKE : fatal error U1077: “”C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.22.27905\bin\HostX86\x64\link.EXE””: Rückgabe-Code “0x460”
    NMAKE : fatal error U1077: “”C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.22.27905\bin\HostX86\x64\nmake.exe””: Rückgabe-Code “0x2”
    NMAKE : fatal error U1077: “cd”: Rückgabe-Code “0x2”
    NMAKE : fatal error U1077: “cd”: Rückgabe-Code “0x2”

    I tried the same with MSCVC 2019 64 bit and get the same result.
    Any help would kindly be appreciated 🙂

    • Please try not to add the libs directly but to add the directory containing the libs to the library search path.

  43. Hello,

    I am new in using QT and tried to install the Qt OPC-UA Plug-In on the following Virtual Machine:
    – Ubuntu (64-bit)
    – Pre-Installed QT-Version: Qt 5.12.8

    After using your given source code for Linux within the Linux-Terminal, I got the following Output:
    maizi@xUbuntu-20:~$ git clone
    Klone nach ‘qtopcua’ …
    remote: Counting objects: 8997, done.
    remote: Compressing objects: 100% (4981/4981), done.
    remote: Total 8997 (delta 5653), reused 6388 (delta 3932)
    Empfange Objekte: 100% (8997/8997), 2.77 MiB | 798.00 KiB/s, Fertig.
    Löse Unterschiede auf: 100% (5653/5653), Fertig.
    maizi@xUbuntu-20:~$ cd qtopcua
    maizi@xUbuntu-20:~/qtopcua$ git checkout 5.12
    Branch ‘5.12’ folgt nun Remote-Branch ‘5.12’ von ‘origin’.
    Zu neuem Branch ‘5.12’ gewechselt
    maizi@xUbuntu-20:~/qtopcua$ mkdir build && cd build
    maizi@xUbuntu-20:~/qtopcua/build$ ~/Qt/5.12.0/gcc_64/bin/qmake ..
    bash: /home/maizi/Qt/5.12.0/gcc_64/bin/qmake: Datei oder Verzeichnis nicht gefunden
    maizi@xUbuntu-20:~/qtopcua/build$ make
    make: *** Es wurden keine Ziele angegeben und keine „make“-Steuerdatei gefunden. Schluss.
    maizi@xUbuntu-20:~/qtopcua/build$ sudo make install

    A folder called “qtopcua” was added to the home directory. But I am not able to include Qt OPC-UA Library within my project. Do you have the solution for this problem? Any help would be kindly appreciated.

    Thank you in advance!

    • Hello,
      according to the output, there is no qmake executable at the path you are specifying.
      Please make sure you use the right path for qmake (check with passing –version to it, you should see the version information).

      • Hello,

        Thank you for your tip. It works now.
        I have an additional Question refering Open62541:

        Do I need to install Open62541 first before using this Installationguide for Qt OPC UA ? Or is the Open62541 library included automaticly within this Installation?

        • Hello,
          the default way to build the open62541 backend uses the open62541 amalgamation release that comes with the Qt OPC UA source code.

  44. Hello,
    I Installed OPC UA for Windows MinGW32 at Qt 5.12.8 & 5.13. The installation was successful is showed. Also in “C:\Qt\Qt5.12.8\5.12.8\mingw73_32\qtopcua\build\plugins\opcua” directory there necessary plugins
    1. libopen62541_backend.a
    2. libopen62541_backendd.a
    3. open62541_backend.dll
    4. open62541_backendd.dll

    I added QT += opcua in my .pro file but it showed
    “unknown module(s) in QT:opcua”

    I could not find where is the problem ?

    • The path looks like you have built Qt OPC UA inside your Qt installation instead of building it somewhere else and then installing it.

      • Now I have built outside of Qt installation. After that it automatically add a opcua folder in here C:\Qt\Qt5.12.8\5.12.8\mingw73_32\plugins
        Now there are two .dll file

        But still when I run a project in Qt creator it showed
        “Project ERROR: Unknown module(s) in QT: opcua”

  45. In my
    in C:\Qt\Qt5.12.8\5.12.8\mingw73_32\plugins
    in C:\Qt\Qt5.12.8\5.12.8\mingw73_32\mkspecs\modules
    in C:\Qt\Qt5.12.8\5.12.8\mingw73_32\qml\QtOpcUa
    these files are missing in my main qt installation file.
    this is ok or I have to copy these files from qtopcua installation file.
    this my qtopcua installation path

    • Did you build and install the 5.12.8 branch for Qt 5.12.8 using the 5.12.8 qmake executable and the the 5.13 branch for Qt 5.13 using the 5.13 qmake executable?
      Please make sure you’re using the exact Qt version you used to build Qt OPC UA to build your project.

  46. I built & installed the 5.12 branch Qt 5.12.8 using the 5.12qmake executable and the 5.13 branch Qt 5.1338 using the 5.13qmake executable.

  47. Hello,

    my Operating System is:

    – Linux 64 Bit
    – Xubuntu 20.04
    – Qt 5.15.2

    I have tried to install the Qt OPC UA Plug-In Version 5.15.2 by using the following instructions:

    git clone
    cd qtopcua
    git checkout 5.15.2
    mkdir build && cd build
    ~/Qt/5.15.2/gcc_64/bin/qmake ..
    sudo make install

    After compiling the code with the Linux terminal, I get the following error message:

    In file included from /home/user/qtopcua/src/opcua/x509/qopcuax509certificatesigningrequest.cpp:38:
    /home/user/qtopcua/src/opcua/x509/openssl_symbols_p.h:59:10: fatal error: openssl/asn1.h: file or path not found
    59 | #include
    | ^~~~~~~~~~~~~~~~
    compilation terminated.
    make[2]: *** [Makefile:7415: .obj/qopcuax509certificatesigningrequest.o] Error 1
    make[2]: path „/home/user/qtopcua/build/src/opcua“ is left
    make[1]: *** [Makefile:49: sub-opcua-make_first] Error 2
    make[1]: path „/home/user/qtopcua/build/src“ wird verlassen
    make: *** [Makefile:50: sub-src-make_first] Error 2

    I checked my openssl version. I have installed openssl 1.1 .
    So what is the reason why it is not finding the openssl/asn1.h file ?
    Are there any problems linked with the Qt Version 5.15.2 ?

    How I can I solve this ?

    Thank you very much!

  48. Hello Basyskom,

    i build qtopcua on linux sucessfully with Qt5.13.2 and it works fine.
    I also want to use in on an embedded ARM device also running Qt15.13.2
    I have created a kit in the Qt Creator and can compile and download and debug on the external arm board perfectly.
    Now i want to use Qtopcua also on the arm board.
    If i install it using the arm boards toolchain i get the following error:
    MS-7823:/opt/Qt/5.13.2/Automation/sources/qtopcua/buildz$ /tools/Xilinx/petalinux_sdk/sysroots/x86_64-petalinux-linux/usr/bin/qmake ..
    Project ERROR: Cannot run compiler ‘aarch64-xilinx-linux-g++ -march=armv8-a+crc -mtune=cortex-a72.cortex-a53 -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security’. Output:
    Maybe you forgot to setup the environment?

    Any ideas?
    Maybe you could add a little explanation how to compile and install for embedded buildchains.

    Thanks you very much

    Kindest Regards

Leave a Reply

Your email address will not be published. Required fields are marked *

Frank Meerkötter

Frank Meerkötter

Frank Meerkoetter is the Development Lead for basysKom GmbH, where he is consulting customers on industrial and embedded applications, often in combination with Qt. He is responsible for the technical consulting, system- and software-architecture within basysKom. He is the maintainer of Qt OPC UA and a contributor to the Qt project. He has a strong background in Embedded Linux, systems programming, distributed systems and application development. He holds a Master of Computer Science from the University of Applied Sciences in Darmstadt.
Share on facebook
Share on twitter
Share on linkedin
Share on reddit
Share on xing
Share on email
Share on stumbleupon
Share on whatsapp
Share on pocket

Read more

Jeremias Bosch
Awesome :-) The basysKom Toolbox

We would like to introduce our basysKom Toolbox to you. It is a state-of-the-art collection of best practices in agile management and software development and a valuable tool for every kickoff meeting.

Come and visit us on the Embedded World 2020 and take your own copy of the printed card deck with you!

Read More »
OPC UA open62541
Frank Meerkötter
Qt OPC UA: Logging improvements in Qt 6.1

So far programs using Qt OPC UA with the open62541 back-end produced quite a bit of chatter on stdout originating from the open62541 stack itself. Unfortunately there was no simple way to get rid of these low-level logs. We now provide a way to control this behavior.

Read More »