使用 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 不满意。
我的进度是这样的:
- 已从 https://open62541.org/
下载 .h 和 .c windows 64 位文件
- 已创建动态-Link 库(DLL) 项目。
- 将 .h 和 .c 文件附加到项目,选择 64 位编译器:
在生成时收到批次警告和错误:
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 已经更新,我建议您直接获取源的当前状态。这样您将能够更好地使用他们提供的示例。这是构建项目的方法。也许它可以更简单,但我遇到了很多问题,所以我把我做的所有步骤都给你了。
准备环境
- 安装 cmake(使用 PATH 更新)
- 安装最新版本的 python(使用 PATH 更新)
https://www.python.org/downloads/
重新打开您的会话,以便考虑新的 PATH 变量
安装python模块"six"
pip 安装六
建设 MBEDTLS
- 下载库的源代码(apache 许可证)
- 运行 源代码中的 cmake
cmake . -DUSE_SHARED_MBEDTLS_LIBRARY=ON -D CMAKE_BUILD_TYPE=Release
用Visual Studio打开"mbed TLS.sln"(我使用的是Community 2015)并在"Release"模式下生成所有内容
复制以下文件
- 库 .lib 从 "library\Release" 到 "Path\To\OpcUa_lib"
- 二进制文件 .dll 从 "library\Release" 到 "Path\To\OpcUa_bin"
- "include"到"Path\To\OpcUa_include"
中的文件夹"mbedtls"
建筑开放62541
- 克隆 open62541 存储库以获取源代码(使用 GitHub 桌面或命令行)
https://github.com/open62541/open62541
在源中创建一个文件夹"build"(例如C:\Users\Davy\Documents\GitHub\open62541\build)
在"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
打开解决方案 "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"三行
在"Release"模式下生成"open62541/lib/open62541"
您现在可以使用以下文件
- 图书馆"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)。
大家好,我想使用 open62541 库为 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 位文件
- 已创建动态-Link 库(DLL) 项目。
- 将 .h 和 .c 文件附加到项目,选择 64 位编译器:
在生成时收到批次警告和错误:
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 已经更新,我建议您直接获取源的当前状态。这样您将能够更好地使用他们提供的示例。这是构建项目的方法。也许它可以更简单,但我遇到了很多问题,所以我把我做的所有步骤都给你了。
准备环境
- 安装 cmake(使用 PATH 更新)
- 安装最新版本的 python(使用 PATH 更新)
https://www.python.org/downloads/
重新打开您的会话,以便考虑新的 PATH 变量
安装python模块"six"
pip 安装六
建设 MBEDTLS
- 下载库的源代码(apache 许可证)
- 运行 源代码中的 cmake
cmake . -DUSE_SHARED_MBEDTLS_LIBRARY=ON -D CMAKE_BUILD_TYPE=Release
用Visual Studio打开"mbed TLS.sln"(我使用的是Community 2015)并在"Release"模式下生成所有内容
复制以下文件
- 库 .lib 从 "library\Release" 到 "Path\To\OpcUa_lib"
- 二进制文件 .dll 从 "library\Release" 到 "Path\To\OpcUa_bin"
- "include"到"Path\To\OpcUa_include" 中的文件夹"mbedtls"
建筑开放62541
- 克隆 open62541 存储库以获取源代码(使用 GitHub 桌面或命令行)
https://github.com/open62541/open62541
在源中创建一个文件夹"build"(例如C:\Users\Davy\Documents\GitHub\open62541\build)
在"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
打开解决方案 "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"三行
在"Release"模式下生成"open62541/lib/open62541"
您现在可以使用以下文件
- 图书馆"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)。