使用Visual Studio 2017构建open62541 DLL

问题描述 投票:0回答:1

Hello社区我想使用open62541 lib为OPC UA服务器编写UI。输入关闭软件应该读取文本文件并将数据转发到已经可用的客户端。

陷入需要编译dll文件的阶段,以便在Windows窗体项目中进一步使用它。

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

但我对VS 2017没有运气。

我的进步顺序如下:

  • 已经从https://open62541.org/下载了.h和.c windows 64位文件
  • 创建动态链接库(DLL)项目。
  • 附加.h和.c文件到项目,选择64编译器:

Project

获取批量警告和构建错误:

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#应用程序中使用它作为服务器?

c# c dll opc-ua open62541
1个回答
1
投票

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


PREPARING THE ENVIRONMENT

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

https://cmake.org/download/

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

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

  1. 重新打开会话,以便考虑新的PATH变量
  2. 安装python模块“六”

pip安装六

BUILDING 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”

BUILDING OPEN62541

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

https://github.com/open62541/open62541

  1. 在源中创建一个“build”文件夹(例如C:\ Users \ Davy \ Documents \ GitHub \ open62541 \ build)
  2. 在“build”文件夹中打开一个终端并运行cmake(adapt \ path \ To ... first)
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. 使用Visual Studio(Community 2015)打开解决方案“build \ open62541.sln”,并在项目“open62541 / lib / open62541”中添加“mbedcrypto.lib”,“mbedtls.lib”和“mbedx509.lib”作为链接器的资源“ 右键单击“open62541 / lib / open62541”,选择“属性” 转到“链接器”=>“常规” 添加“Path \ To \ OpcUa_lib”作为依赖项的附加目录 转到“链接器”=>“条目” 在“附加依赖项”中添加三行“mbedcrypto.lib”,“mbedtls.lib”和“mbedx509.lib”
  2. 在“发布”模式下生成“open62541 / lib / open62541”
  3. 您现在可以使用以下文件 库“build \ bin \ Release \ open62541.lib” 二进制“build \ bin \ Release \ open62541.dll” 文件“build \ open62541.h”

INTEGRATION IN ANOTHER PROJECT

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

© www.soinside.com 2019 - 2024. All rights reserved.