使用 Visual Studio 2017 构建 open62541 DLL

Build open62541 DLL with Visual Studio 2017

大家好,我想使用 open62541 库为 OPC UA 服务器编写 UI。 输入关闭软件应该读取文本文件并通过服务器将数据投射到已经可用的客户端。

停留在需要编译 dll 文件以便在 windows 表单项目中进一步使用它的阶段。

有一些信息提到 Davy Triponney 使用 Visual C++ 2013 编译它 https://github.com/open62541/open62541/wiki/Using-open62541-from-C%23

但我对 VS 2017 不满意。

我的进度是这样的:

在生成时收到批次警告和错误:

Severity    Code    Description Project File    Line    Suppression State
Warning C4005   'CLOSESOCKET': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39113   
Warning C4005   '_Q_INVALIDATE': macro redefinition open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 130 
Warning C4005   'UA_atomic_sync': macro redefinition    open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 813 
Warning C4005   'UA_atomic_sync': macro redefinition    open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 815 
Warning C4005   'CLOSESOCKET': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 35386   
Warning C4005   'errno__': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 35387   
Warning C4005   'CLOSESOCKET': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39088   
Warning C4005   'CLOSESOCKET': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39106   
Warning C4005   'UA_sleep_ms': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39111   
Warning C4005   'UA_sleep_ms': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39127   
Warning C4005   'UA_sleep_ms': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39130   
Warning C4005   'WIN32_INT': macro redefinition open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39135   
Warning C4005   'OPTVAL_TYPE': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39136   
Warning C4005   'ERR_CONNECTION_PROGRESS': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39137   
Warning C4005   'UA_fd_set': macro redefinition open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39167   
Warning C4005   'UA_fd_isset': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39168   
Warning C4005   'errno__': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39176   
Warning C4005   'errno__': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39181   
Warning C4005   'INTERRUPTED': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39182   
Warning C4005   'WOULDBLOCK': macro redefinition    open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39183   
Warning C4005   'AGAIN': macro redefinition open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 39184   
Warning C4005   'ANSI_COLOR_RED': macro redefinition    open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40158   
Warning C4005   'ANSI_COLOR_GREEN': macro redefinition  open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40159   
Warning C4005   'ANSI_COLOR_YELLOW': macro redefinition open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40160   
Warning C4005   'ANSI_COLOR_BLUE': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40161   
Warning C4005   'ANSI_COLOR_MAGENTA': macro redefinition    open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40162   
Warning C4005   'ANSI_COLOR_CYAN': macro redefinition   open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40163   
Warning C4005   'ANSI_COLOR_RESET': macro redefinition  open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40164   
Warning C4005   'BEGIN_CRITSECT': macro redefinition    open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40709   
Warning C4005   'END_CRITSECT': macro redefinition  open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 40710   
Error   C1010   unexpected end of file while looking for precompiled header. Did you forget to add '#include "stdafx.h"' to your source?    open62541   c:\users\scadaadmin\desktop\open62541-win64\open62541.c 43979   

问题是 属性 我如何使用 Visual Studio 2017 编译 open62541 c 代码 dll 文件,以便能够在 windows 形式的 C# 应用程序中将其用作服务器?

由于项目 open62541 已经更新,我建议您直接获取源的当前状态。这样您将能够更好地使用他们提供的示例。这是构建项目的方法。也许它可以更简单,但我遇到了很多问题,所以我把我做的所有步骤都给你了。


准备环境

  1. 安装 cmake(使用 PATH 更新)

https://cmake.org/download/

  1. 安装最新版本的 python(使用 PATH 更新)

https://www.python.org/downloads/

  1. 重新打开您的会话,以便考虑新的 PATH 变量

  2. 安装python模块"six"

pip 安装六

建设 MBEDTLS

  1. 下载库的源代码(apache 许可证)

https://tls.mbed.org/download

  1. 运行 源代码中的 cmake
cmake . -DUSE_SHARED_MBEDTLS_LIBRARY=ON -D CMAKE_BUILD_TYPE=Release
  1. 用Visual Studio打开"mbed TLS.sln"(我使用的是Community 2015)并在"Release"模式下生成所有内容

  2. 复制以下文件

    • 库 .lib 从 "library\Release" 到 "Path\To\OpcUa_lib"
    • 二进制文件 .dll 从 "library\Release" 到 "Path\To\OpcUa_bin"
    • "include"到"Path\To\OpcUa_include"
    • 中的文件夹"mbedtls"

建筑开放62541

  1. 克隆 open62541 存储库以获取源代码(使用 GitHub 桌面或命令行)

https://github.com/open62541/open62541

  1. 在源中创建一个文件夹"build"(例如C:\Users\Davy\Documents\GitHub\open62541\build)

  2. 在"build"文件夹下打开一个terminal然后运行cmake(先适配\path\To...)

cmake .. -G "Visual Studio 14 2015" -DUA_ENABLE_ENCRYPTION=ON -DUA_ENABLE_AMALGAMATION=ON -DMBEDTLS_INCLUDE_DIRS="Path\To\OpcUa_include" -DMBEDTLS_LIBRARY="Path\To\OpcUa_lib" -DMBEDX509_LIBRARY="Path\To\OpcUa_lib" -DMBEDCRYPTO_LIBRARY="Path\To\OpcUa_lib" -DBUILD_SHARED_LIBS=ON -D CMAKE_BUILD_TYPE=Release -DUA_LOGLEVEL=100
  1. 打开解决方案 "build\open62541.sln" with Visual Studio (Community 2015) 并添加 "mbedcrypto.lib"、"mbedtls.lib" 和 "mbedx509.lib" 作为资源项目中的链接器 "open62541/lib/open62541"

    • 右击 "open62541/lib/open62541", select "properties"
    • 转到"Linker" => "General"
    • 添加 "Path\To\OpcUa_lib" 作为依赖项的附加目录
    • 转到"Linker" => "Entry"
    • 在"Additional dependencies"
    • 中添加"mbedcrypto.lib"、"mbedtls.lib"、"mbedx509.lib"三行
  2. 在"Release"模式下生成"open62541/lib/open62541"

  3. 您现在可以使用以下文件

    • 图书馆"build\bin\Release\open62541.lib"
    • 二进制"build\bin\Release\open62541.dll"
    • 文件"build\open62541.h"

在另一个项目中的集成

您需要引用 open62541 的合并 .h 并在链接器中添加这些依赖项:open62541.lib、mbedcrypto.lib、mbedtls.lib、mbedx509.lib、Ws2_32.lib。我还必须在项目属性中指定平台 Visual Studio 2013 (v120)。