Open62541的环境配置及其安装
内容与现版本有些许偏差,仅提供参考。
一、环境配置
在Open62541的官方文档中,Building the Library一节详细的指出了Open62541的编译过程。
目前Open62541支持通过Cmake编译到Ubuntu、Debian、Windows、OS X、OpenBSD平台上。
本文以编译到Window10为例子,说明情况,可以参考大神的编译过程,此处说明我的构建过程。
1.1 下载源码
在官网下载最新的数据包:https://github.com/open62541/open62541
或者使用你的git工具克隆仓库里的文件。(我使用的是Sourcetree)
1.2 基础编译环境的创建
Building with CMake on Windows
Here we explain the build process for Visual Studio (2013 or newer). To build with MinGW, just replace the compiler selection in the call to CMake.
Download and install
Python 2.7.x (Python 3.x works as well): https://python.org/downloads
Microsoft Visual Studio: https://www.visualstudio.com/products/visual-studio-community-vs
Download the open62541 sources (using git or as a zipfile from github)
Open a command shell (cmd) and run
cd <path-to>\open62541
mkdir build
cd build
<path-to>\cmake.exe .. -G "Visual Studio 14 2015"
:: You can use use cmake-gui for a graphical user-interface to select features
Then open buildopen62541.sln in Visual Studio 2015 and build as usual
上文我贴出了官网上说明的在windows中,其中说明了三个基础的要点。
需要安装python 2.7.x以及以上的库
需要安装Cmake 的编译环境
需要使用到Microsoft Visual Studio2015或者以上的编译器(当然你要是会使用MinGW64当我没说)
到此处,基本的编译环境已经安装完毕,并且将他们添加进变量环境的系统Path中
需要进行测试
按住Win+r ->输入cmd->打开cmd命令行:
输入python
Microsoft Windows [版本 10.0.18363.657]
(c) 2019 Microsoft Corporation。保留所有权利。
C:\Users\Yummy>python
Python 3.7.4 (tags/v3.7.4:e09359112e, Jul 8 2019, 19:29:22) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
输入cmake
Microsoft Windows [版本 10.0.18363.657]
(c) 2019 Microsoft Corporation。保留所有权利。
C:\Users\Yummy>Cmake
Usage
cmake [options] <path-to-source>
cmake [options] <path-to-existing-build>
cmake [options] -S <path-to-source> -B <path-to-build>
Specify a source directory to (re-)generate a build system for it in the
current working directory. Specify an existing build directory to
re-generate its build system.
Run 'cmake --help' for more information.
到此处基本的变量环境已经安装完毕(vs2017自行安装)。
二、编译运行
2.1 打开Cmake GUI,执行以下六步:
将你的找到你下载的源码所存放的位置,并粘贴其位置。
因为Cmake默认指定的编译路径是build,所以需要在你的源码中创建一个build文件夹,并且添加其路径。
首次编译需要点击Configure ,配置编译的对象,平台。
在完成上一步后会弹出4、5、6所处的对话框,因为我当时安装的是Visual studio 2017,所以勾选如图
其实此处默认是Win32,可以不指定
使用默认的native 编译器(如果需要编译到单片机中间,需要使用交叉编译的环境),点击Finish
2.2 首次编译后生成默认的工程
如果在箭头处报这个红,说明存在警告,但是此次的错误由Open62541的版本号引起可以忽略
2.3 以需要生成Example为例
此处需要注意我们我们不管其它的默认勾选项,但需要注意勾选UA_BUILD_EXAMPLES,同时取消勾选UA_BUILD_AMALGAMATION,这两个编译选项又冲突,将在后文描述。
勾选我们需要的UA_BUILD_EXAMPLES
点击Generate
点击Open Project
此处一般容易出错,我也是卡住了很久,尤其注意添加按照好的变量环境到系统变量的Path里面,
还有是否是按照完毕它需要的软件,因为此处只用于测试,所以其需要的环境并不多,一般不会产生错误
然后分别点击Generate ,Open Project 后会自动打开你的vs2017
将ALL_BUILD设置为启动项,编译执行,期间需要等待。
单机本地Windows调试器后,会编译一段时间 ,若生成了:
表示生成成功了。点击确定。
这时,你可以将example里面的程序设置为启动项 ,进行调试,测试,可以在open62541-master\build\bin\examples中找到可执行文件,进行配合使用。
2.4 了解编译选项
此处摘选于 Main Build Options
open62541 项目使用 CMake 来管理生成选项、代码生成以及为不同的系统和 IDEs 生成生成项目。ccmake 或cmake-gui的工具可用于以图形方式设置生成选项。可以从下图看出编译选项。
大多数选项可以在ua_config.h(单文件版本的open62541.h)中手动更改代码生成后。但通常没有必要调整它们。
主要生成选项
CMAKE_BUILD_TYPE
RelWithDebInfo -O2 优化,带有调试符号发布-O2 优化,无需调试符号调试-O0 优化,使用调试符号最小值 -没有调试符号的操作系统优化
UA_LOGLEVEL
SDK 仅记录UA_LOGLEVEL及以上定义级别的事件。日志记录事件级别如下:600: 致命500: 错误400: 警告300: 信息200: 调试100: 跟踪
UA_MULTITHREADING
多线程支持级别。支持的级别当前如下:0-199: 已禁用多线程支持。100-199:标有UA_THREADSAFE宏的 API 函数在内部使用互斥码进行保护。允许多个线程同时调用 SDK 的这些功能,而不会造成争用条件。此外,此级别支持处理来自外部辅助线程的异步方法调用。>=200: 工作分配给许多内部工作线程。这些工作线程是在 SDK 中创建的。(实验功能!预期错误。
选择生成artefacts
默认情况下,仅生成主库共享对象libopen62541.so (open62541.dll) 或静态链接存档 open62541.a (open62541.lib)。其他项目可以通过以下选项指定:
UA_BUILD_EXAMPLES
从示例/*.c编译示例服务器和客户端。
UA_BUILD_UNIT_TESTS
编译单元测试。测试可以通过做测试执行
UA_BUILD_SELFSIGNED_CERTIFICATE
为服务器生成自签名证书(需要openSSL)
详细的 SDK 功能
UA_ENABLE_SUBSCRIPTIONS
启用订阅
UA_ENABLE_SUBSCRIPTIONS_EVENTS(实验)
启用对订阅使用事件。这是一个新功能,当前标记为"实验"。
UA_ENABLE_SUBSCRIPTIONS_ALARMS_CONDITIONS(实验)
启用对订阅使用 A&C。这是一个基于事件构建的新功能,当前标记为"实验"。
UA_ENABLE_METHODCALLS
启用方法服务集
UA_ENABLE_PARSING
启用解析内置数据类型(Guid、NodeId 等)的人类可读格式。对 SDK 不重要的实用程序函数。
UA_ENABLE_NODEMANAGEMENT
在运行时启用动态添加和删除节点
UA_ENABLE_AMALGAMATION
将单文件版本编译到打开 62541.c和open62541.h 的文件中。不建议安装。
UA_ENABLE_IMMUTABLE_NODES
不会编辑信息模型中的节点,而是复制和替换。替换使用原子操作完成,以便信息模型始终一致,并且可以从中断或并行线程访问(取决于节点存储插件实现)。此功能是UA_MULTITHREADING的先决条件。
UA_ENABLE_COVERAGE
测量单元测试的覆盖范围
UA_ENABLE_DISCOVERY
启用发现服务 (LDS)
UA_ENABLE_DISCOVERY_MULTICAST
使用多播支持启用发现服务 (LDS-ME)
UA_ENABLE_DISCOVERY_SEMAPHORE
启用发现信号量支持
UA_NAMESPACE_ZERO
命名空间零包含标准定义的节点。并非所有应用程序都需要完整的命名空间零。可选选项如下:
MINIMAL:与大多数客户端兼容的裸骨命名空间零。但是这个命名空间 0 非常小,无法通过 CTT(OPC 基金会的符合性测试工具)。
REDUCED:通过 CTT 的小命名空间零。
FULL: 从官方 XML 定义生成的全命名空间零。
高级生成选项UA_FILE_NS0可用于覆盖用于命名空间零生成的 XML 文件。
某些选项标记为高级。需要切换高级选项才能在 cmake GUI 中可见。
UA_ENABLE_TYPEDESCRIPTION
将类型和成员名称添加到UA_DataType结构。默认情况下启用。
UA_ENABLE_STATUSCODE_DESCRIPTIONS
将状态代码的人类可读名称编译到二进制文件中。默认情况下启用。
UA_ENABLE_FULL_NS0
使用完整的 NS0 而不是最小命名空间 0 节点集UA_FILE_NS0用于指定从 namespace0 文件夹生成 NS0 的文件。默认值为Opc.Ua.NodeSet2.xml
调试生成选项
此组包含主要用于开发库本身的生成选项。
UA_DEBUG
启用不用于生产生成的断言和其他定义
UA_DEBUG_DUMP_PKGS
以六进制格式转储服务器接收的每个包
构建共享库
open62541 足够小,大多数用户都希望将库静态链接到其程序。如果需要共享库 (.dll, .so),则可以在"BUILD_SHARED_LIBS"选项的"CMake"中启用此功能。请注意,此选项修改ua_config.h文件,该文件也包含在open62541.h中,用于单文件分发。
最小化二进制大小
通过调整生成配置,可以显著减小生成的二进制文件的大小。通过 open2541,可以配置需要少于 100kB RAM 和 ROM 的最小服务器。
以下选项会影响 ROM 要求:
首先,在 CMake 中,生成类型可以设置为CMAKE_BUILD_TYPE_MinSizeRel。这将设置编译器标志以最小化二进制大小。生成类型还会剥离调试信息。其次,可以通过上述生成标志删除功能来减小二进制大小。
其次,将UA_NAMESPACE_ZERO设置为"MINIMAL"可减小内置信息模型的大小。在某些情况下,设置此选项可以将二进制大小减少一半。
第三,某些功能可能不需要,可以禁用以减少二进制占用空间。例如订阅或加密通信。
最后,日志记录消息占用了二进制文件中的大量空间,并且在嵌入式方案中可能不需要。将UA_LOGLEVEL设置为值超过 600 (FATAL) 会禁用所有日志记录。此外,功能标志UA_ENABLE_TYPEDESCRIPTION,UA_ENABLE_STATUSCODE_DESCRIPTIONS将静态``信息添加到仅用于人工可读日志记录和调试的二进制文件。
服务器的 RAM 要求主要归功于以下设置:
信息模型的大小
连接的客户端数
预分配的最大消息大小配置
三、创建证书
OpenSSL下载安装
3.1、下载OpenSSL
OpenSSL下载地址:https://oomake.com/download/openssl
这个链接有Windows版和源码版最新版下载地址,可以满足Windows、LInux、Mac OS系统使用。
3.2、Windows系统安装OpenSSL
到上面的链接下载OpenSSL Windows版本,注意32位和64位是不同的安装包,
下载之后是exe文件,双击按照提示一步步安装就可以了。
本来此处我有两种证书的创建方式,但是另外一种需要按照MSYS2去执行openssl,其它终端都无法成功。(在Windows上使用MSys2,在Linux上仅使用命令行)
感兴趣可以自行查看:https://github.com/juangburgos/QUaServer#server。
也可参考参考大佬的 使用openssl生成自签名证书。
安装完成openssl后需要将它的bin目录添加进系统的变量环境中!
生成自签名证书和私匙
此处参考,https://blog.csdn.net/whahu1989/article/details/103212001
但此处还是以官方python创建证书为准:
cd到open62541源码目录下的tools/certs目录下,这里有2个文件,
create_self-signed.py
localhost.cnf
可以运行这个python脚本去生成证书和私匙,但是需要预先安装一个python模块 — netifaces,因为我是win10 ,使用命令行,发现无法正常识别到openssl,输入以下命令安装,ubuntu下操作也是一样的
C:\Users\Yummy>G:
G:\>cd G:\open62541-master\tools\certs
G:\open62541-master\tools\certs>python create_self-signed.py
No ApplicationUri given for the certificate. Setting to urn:open62541.server.application
'openssl' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'openssl' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
'openssl' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
Traceback (most recent call last):
File "create_self-signed.py", line 105, in <module>
os.remove("localhost.key")
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'localhost.key'
G:\open62541-master\tools\certs>
后来我发现是我忘记了将opensll添加进系统变量的Path中。
所以这里强调一次如何添加:以我电脑为例子其安装地址为:D:\Program\OpenSSL-Win64\OpenSSL-Win64\bin
选中“此电脑”,右键选择“属性”。
点击左侧“高级系统设置”。
接着点击“高级”下的“环境变量”。
系统变量环境中间找到Path,点击编辑
可以执行“新建”、“删除”、“编辑”等操作
将我上面的地址粘贴进去
在重新设置变量环境Path后,继续执行入下面所显示的
Microsoft Windows [版本 10.0.18363.657]
(c) 2019 Microsoft Corporation。保留所有权利。
C:\Users\Yummy>G:
G:\>cd G:\open62541-master\tools\certs
G:\open62541-master\tools\certs>python create_self-signed.py
No ApplicationUri given for the certificate. Setting to urn:open62541.server.application
Generating a RSA private key
............+++++
...+++++
writing new private key to 'localhost.key'
-----
writing RSA key
Certificates generated in G:\open62541-master\tools\certs
G:\open62541-master\tools\certs>
为了方便我们每次都要重新进cmd,不太方便,我写了一个简单的批处理脚本 Ceritifate.bat
python .\create_self-signed.py .
pause
也可以通过
python create_self-signed.py -uurn:yummy.server.application
以-u+ApplicationUri的形式指定Url此处有坑
// 填坑的地方,非常重要* cc->clientDescription.applicationUri = UA_STRING_ALLOC("urn:open62541.server.application");
在程序中必须指定我们自己定义的Url不然会无法正常通讯。
四、完成UA_ENABLE_ENCRYPTION
4.1 问题
由于证书和加密编程用到了mbedTLS库,所以我们需要将库文件mbedTLS.lib和它的包含文件目录被cmake找到,否则无法通过cmake的编译。
但是Windows与liunx有些与差别,往往不能够在安装完毕并设置完mbedTLS后自动找到它的路径。
这个是本片文章的小难点。当时我也被卡住了很久。
我将在此处介绍两种方法来配置环境:
在FindMbedTLS.cmake中手动添加mbedtls路径
4.2 手动添加mbedtls路径
此处参考大神文章 学习open62541 --- [12] 加密。
我也亲自测试了一番
下载mebedtls并进行编译
为了快速下载,我使用了码云gitee地址:https://search.gitee.com/?skin=rec&type=repository&q=mbedtls
编译目标:mbedtls.lib、mbedcrypto.lib、mbedx509.lib
将下载后的文件解压。
进入.\mbedtls\visualc\VS2010->打开mbedTLS.sln解决方案
因为它上面使用的是vs2010,我们需要重定向项目,使其支持我们最新的平台工具集v141
编译后只会生成一个mbedTLS.lib,还缺少mbedcrypto.lib,mbedx509.lib(可能它嵌入了其它两个库)
所以我选择稳妥的cmake编译
编译方式同open62541,
在目录下创建一个build文件夹
在Cmake-GUI里面设置Visual studio 2017,configure-->Generate-->Open Project-->本地Windows调试器-->编译成功
编译后在.\mbedtls\build\library\Debug文件夹下会生成我们的编译目标
将三个编译目标添加进.\mbedtls\library
修改FindMbedTLS.cmake
打开open62541源码目录下的tools/cmake/FindMbedTLS.cmake,添加第二步里生成的mbedtls路径,如下,
修改前,
#check environment variable
if("$ENV{MBEDTLS_FOLDER_INCLUDE}")
set(MBEDTLS_FOLDER_INCLUDE "$ENV{MBEDTLS_FOLDER_INCLUDE}")
endif()
if("$ENV{MBEDTLS_FOLDER_LIBRARY}")
set(MBEDTLS_FOLDER_LIBRARY "$ENV{MBEDTLS_FOLDER_LIBRARY}")
endif()
修改后,
#check environment variable
if("$ENV{MBEDTLS_FOLDER_INCLUDE}")
set(MBEDTLS_FOLDER_INCLUDE "$ENV{MBEDTLS_FOLDER_INCLUDE}")
else()
set(MBEDTLS_FOLDER_INCLUDE "C:/Users/Yummy/Desktop/mbedtls/include")
endif()
if("$ENV{MBEDTLS_FOLDER_LIBRARY}")
set(MBEDTLS_FOLDER_LIBRARY "$ENV{MBEDTLS_FOLDER_LIBRARY}")
else()
set(MBEDTLS_FOLDER_LIBRARY "C:/Users/Yummy/Desktop/mbedtls/library")
endif()
"C:/Users/Yummy/Desktop/mbedtls/include"和"C:/Users/Yummy/Desktop/mbedtls/library"是我暂时将编译完成后的include和library的路径。PS:FindMbedTLS.cmake首先会从系统环境变量里查找mbedtls。此处的目的是让Cmake找到我们设置的mbedtls的library和include
经过测试通过下图手动去配置添加cmake变量path反而会找不到(这也是当时卡了很久的原因)
MBEDTLS_INCLUDE_DIRS | C:/Users/Yummy/Desktop/mbedtls/include |
MBEDTLS_LIBRARY_DIRS | C:/Users/Yummy/Desktop/mbedtls/library |
勾选UA_ENABLE_ENCRYPTION和UA_BUILD_EXAMPLE
确保都执行了上面的操作后
勾选UA_ENABLE_ENCRYPTION和UA_BUILD_EXAMPLE
后点击Configure、Generate、Open Project
如图所示,我们可以正常打开server_encryption.c
但是我们自己生成的applicationUrl需要与ua_config_default.c中间的
/***************************/
/* Default Server Settings */
/***************************/
#define MANUFACTURER_NAME "open62541"
#define PRODUCT_NAME "open62541 OPC UA Server"
#define PRODUCT_URI "http://open62541.org"
#define APPLICATION_NAME "open62541-based OPC UA Application"
#define APPLICATION_URI "urn:unconfigured:application"
#define APPLICATION_URI_SERVER "urn:open62541.server.application"
中间的#define APPLICATION_URI_SERVER "urn:open62541.server.application"需要与证书里面的applicationUrl一致
如果不一致,需要添加如下:
UA_Server *server = UA_Server_new();
UA_ServerConfig *config = UA_Server_getConfig(server);
config->applicationDescription.applicationUri =
UA_STRING_ALLOC("urn:open62541.server.application");//在配置完默认设置后,设置服务器的url,或者去修改 #define APPLICATION_URI_SERVER "urn:open62541.server.application"
UA_StatusCode retval =
UA_ServerConfig_setDefaultWithSecurityPolicies(config, 4840,
&certificate, &privateKey,
trustList, trustListSize,
issuerList, issuerListSize,
revocationList,
revocationListSize);
编译后成功,但是会出现链接失败
链接警告:
6>LINK : warning LNK4098: 默认库“MSVCRTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
解决方法:
在一个vs解决方案中,一个可执行项目依赖多个lib项目的情况下,经常出现此类问题,原因在默认运行时库的引用上。一般情况下,我会首先打开各个项目的属性查看如下选项:项目--属性--配置属性--C/C++--代码生成--运行时库(有/MT,/MTd,/Md,/MDd四个选项)。必须查看所有项目使用的库都是相同的,不同的话就修改成相同的吧。
原文链接: https://blog.csdn.net/yingmeng9913/article/details/49005535
如上图所示,(PS:我使用make也会出现这种状况,但不知道如何去解决这种问题)
成功修改为: 多线程DLL(/MD)后编译运行生成的encryption.exe会提示如下信息
说明我们需要传递入口参数:
进入.\open62541-master\build\bin\examples找到刚刚生成的server_encryption.exe
将我们上文生成的两个证书(server_cert.der 、server_key.der)放置该目录下
如下图所示进入该文件夹,执行server_encryption.exe server_cert.der server_key.der
Microsoft Windows [版本 10.0.18363.657]
(c) 2019 Microsoft Corporation。保留所有权利。
C:\Users\Yummy>cd C:\Users\Yummy\Desktop\open62541-master\build\bin\examples
C:\Users\Yummy\Desktop\open62541-master\build\bin\examples>server_encryption.exe server_cert.der server_key.der
[2020-03-14 13:15:15.415 (UTC+0800)] info/network TCP network layer listening on opc.tcp://SoySauce:4840/
4.3 填坑Vcpkg
使用Vcpkg开源库管理器在此处显得有些多余了,但是这是我第一次找到的方法。给大家提供另外一种的思路。
因为前面我们已经使用过CmakeGUI编译过工程并且修改过FindMbedTLS.cmake,所以需要重新解压一次open62541-master.zip。进行测试
首先
同样的编译步骤,新建build文件夹,使用CmakeGUI创建编译最初始的文件。
然后(因为我电脑上正好也没有vcpkg,从头来过正好)
下载文件,我依旧选择了下载速度快的gitee:https://gitee.com/mirrors/vcpkgManager?_from=gitee_search
我将其解压到D:\Program目录下
编译
Vcpkg大量使用的psl脚本,所以官方强烈推荐使用PowerShell而不时CMD命令行来执行各种操作。尽管在使用的时候兼容CMD,但是在编译这一步,请使用PowerShell。
编译很简单,使用PowerShell执行Vcpkg工程目录下的“bootstrap-vcpkg.bat”命令,即可编译。编译好以后会在同级目录下生成vcpkg.exe文件。编译期间,脚本会自动下载vswhere组件。
PS D:\Program\vcpkg> ./bootstrap-vcpkg.bat
Building vcpkg.exe ...
pch.cpp
archives.cpp
checks.cpp
chrono.cpp
.......... //中间太长了省略
visualstudio.cpp
vcpkglib.vcxproj -> D:\Program\vcpkg\toolsrc\msbuild.x86.release\vcpkglib.lib
vcpkg.cpp
正在生成代码
All 19721 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
已完成代码的生成
vcpkg.vcxproj -> D:\Program\vcpkg\toolsrc\msbuild.x86.release\vcpkg.exe
vcpkgmetricsuploader.cpp
正在生成代码
All 7708 functions were compiled because no usable IPDB/IOBJ from previous compilation was found.
已完成代码的生成
vcpkgmetricsuploader.vcxproj -> D:\Program\vcpkg\toolsrc\msbuild.x86.release\vcpkgmetricsuploader.exe
Building vcpkg.exe... done.
Telemetry
---------
vcpkg collects usage data in order to help us improve your experience. The data collected by Microsoft is anonymous. You can opt-out of telemetry by re-running bootstrap-vcpkg.bat with -disableMetrics.
Read more about vcpkg telemetry at docs/about/privacy.md
PS D:\Program\vcpkg>
安装完毕后执行 .\vcpkg install mbedtls:x86-windows-static
意思是安装x86架构的mbedtls,vcpkg不仅支持x86架构,还支持arm架构,详情参考指定编译某种架构的程序库。
下载过程会比较慢,请耐心等待。
将下载包,解压放在.\vcpkg\downloads文件夹下。然后打开PowerShell
但是在安装过程中出现了一个小插曲:
PS D:\Program\vcpkg> .\vcpkg install mbedtls:x86-windows
Computing installation plan...
The following packages will be built and installed:
mbedtls[core]:x86-windows
Starting package 1/1: mbedtls:x86-windows
Building package mbedtls[core]:x86-windows...
Warning: The following VS instances are excluded because the English language pack is unavailable.
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community
Please install the English language pack.
-- Using cached D:/Program/vcpkg/downloads/ARMmbed-mbedtls-mbedtls-2.16.3.tar.gz
-- Using source at D:/Program/vcpkg/buildtrees/mbedtls/src/tls-2.16.3-26b16440ea
-- Configuring x86-windows
CMake Error at scripts/cmake/vcpkg_execute_required_process.cmake:72 (message):
Command failed: ninja -v
Working Directory: D:/Program/vcpkg/buildtrees/mbedtls/x86-windows-rel/vcpkg-parallel-configure
Error code: 1
See logs for more information:
D:\Program\vcpkg\buildtrees\mbedtls\config-x86-windows-out.log
Call Stack (most recent call first):
scripts/cmake/vcpkg_configure_cmake.cmake:295 (vcpkg_execute_required_process)
ports/mbedtls/portfile.cmake:19 (vcpkg_configure_cmake)
scripts/ports.cmake:90 (include)
Error: Building package mbedtls:x86-windows failed with: BUILD_FAILED
Please ensure you're using the latest portfiles with `.\vcpkg update`, then
submit an issue at https://github.com/Microsoft/vcpkg/issues including:
Package: mbedtls:x86-windows
Vcpkg version: 2020.02.04-nohash
Additionally, attach any relevant sections from the log files above.
特别地,报以下错误居然导致也不能用vcpkg安装lib:
Warning: The following VS instances are excluded because the English language pack is unavailable.
vcpkg 按他说的,少英文语言包,到VS2017安装向导,修改安装,点语言包,勾选英语;再去安装第三方库,发现OK了....;
PS D:\Program\vcpkg> .\vcpkg install mbedtls:x86-windows-static
Computing installation plan...
The following packages will be built and installed:
mbedtls[core]:x86-windows-static
Starting package 1/1: mbedtls:x86-windows-static
Building package mbedtls[core]:x86-windows-static...
-- Using community triplet x86-windows-static. This triplet configuration is not guaranteed to succeed.
-- [COMMUNITY] Loading triplet configuration from: D:\Program\vcpkg\triplets\community\x86-windows-static.cmake
-- Using cached D:/Program/vcpkg/downloads/ARMmbed-mbedtls-mbedtls-2.16.3.tar.gz
-- Using source at D:/Program/vcpkg/buildtrees/mbedtls/src/tls-2.16.3-26b16440ea
-- Configuring x86-windows-static
-- Building x86-windows-static-dbg
-- Building x86-windows-static-rel
-- Installing: D:/Program/vcpkg/packages/mbedtls_x86-windows-static/share/mbedtls/copyright
-- Performing post-build validation
-- Performing post-build validation done
Building package mbedtls[core]:x86-windows-static... done
Installing package mbedtls[core]:x86-windows-static...
Installing package mbedtls[core]:x86-windows-static... done
Elapsed time for package mbedtls:x86-windows-static: 19.14 s
Total elapsed time: 19.14 s
已经成功安装了mbedtls在我们的vcpkg中,此时我们已经编译完成了我们的mbedtls。
将Vcpkg集成到我们的Vs2017中
“集成到全局”适用于Visual Studio开发环境和msbuild命令行。在PowerShell中间继续输入如下:
PS D:\Program\vcpkg> .\vcpkg integrate install
Applied user-wide integration for this vcpkg root.
All MSBuild C++ projects can now #include any installed libraries.
Linking will be handled automatically.
Installing new libraries will make them instantly available.
CMake projects should use: "-DCMAKE_TOOLCHAIN_FILE=D:/Program/vcpkg/scripts/buildsystems/vcpkg.cmake"
"-DCMAKE_TOOLCHAIN_FILE=D:/Program/vcpkg/scripts/buildsystems/vcpkg.cmake"是本小节的重点
使用Vs2017的自带编译工具:x64 Native Tools CommandPrompt forvs 2017
开始-->x64 Native Tools CommandPrompt forvs 2017
在文件夹下创建build
执行 cmake命令
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.9.18
** Copyright (c) 2017 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community>cd E:\open62541-master\build
D:\Program Files (x86)\Microsoft Visual Studio\2017\Community>E:
E:\open62541-master\build>cmake .. -G "Visual Studio 15 2017" -DUA_ENABLE_ENCRYPTION=ON -DUA_BUILD_EXAMPLES=ON -DCMAKE_TOOLCHAIN_FILE="D:\Program\vcpkg\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET="x86-windows-static"
-- Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.18363.
-- The C compiler identification is MSVC 19.16.27034.0
-- The CXX compiler identification is MSVC 19.16.27034.0
-- Check for working C compiler: D:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe
-- Check for working C compiler: D:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: D:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe
-- Check for working CXX compiler: D:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PythonInterp: C:/Users/Yummy/AppData/Local/Programs/Python/Python37-32/python.exe (found version "3.7.4")
-- Found Git: D:/Program Files/Git/cmd/git.exe (found version "2.22.0.windows.1")
fatal: not a git repository (or any of the parent directories): .git
CMake Warning at tools/cmake/SetGitBasedVersion.cmake:83 (message):
Failed to determine OPEN62541_VERSION from repository tags. Using default
version "".
Call Stack (most recent call first):
CMakeLists.txt:39 (set_open62541_version)
-- open62541 Version: 0.0.0-unknown
-- CMAKE_BUILD_TYPE not given; setting to 'Debug'
-- The selected architecture is: win32
-- Found MBEDTLS: D:/Program/vcpkg/installed/x86-windows-static/include
-- Could NOT find Sphinx (missing: SPHINX_EXECUTABLE)
-- Could NOT find LATEX (missing: LATEX_COMPILER)
-- Configuring done
-- Generating done
-- Build files have been written to: E:/open62541-master/build
在build文件夹下就生成了open62541.sln而且也可以成功输出
-- Found MBEDTLS: D:/Program/vcpkg/installed/x86-windows-static/include
这种方式依赖于第三方库,而且vcpkg下载速度慢,比较磨人,但是傻瓜式。
通过CmakeGUI可以继续编辑,其效果如下
到目前位置我们环境和安装过程已经全部介绍完毕!
cmake .. -G "Visual Studio 15 2017" -DUA_ENABLE_ENCRYPTION=ON -DUA_BUILD_EXAMPLES=ON -DCMAKE_TOOLCHAIN_FILE="G:\C_C++\Libraries\vcpkg-master\scripts\buildsystems\vcpkg.cmake" -DVCPKG_TARGET_TRIPLET="x86-windows-static"
五、使用UaExpert
此处参考 学习open62541 --- [2] 使用UaExpert
5.1 创建证书
因为我已经安装过Uaexpert了,所以无法弹出刚刚安装的时候New Application Instance Certificate这个界面,所以引用大佬的进行说明
第一次打开UaExpert会弹出如下界面,主要填写Subject那一栏,如上图,这些信息可以随便填(有过制作安全证书(Certificate)的同学应该知道这些信息是用来制作csr的)。然后点击OK。
如上图所示,点击"十"添加服务器,因为我们使用的端口是4840所以可以通过Local进行发现它,默认是Anonymous匿名模式,点击ok确定当前服务器。
在Project中选择我们刚刚配置的服务器,再点击‘🔌’符号的Connect Server。
然后就可以在地址空间中看见我们开启的服务器中间的一些变量、对象和方法。
证书验证可以参考 学习open62541 --- [12] 加密 的使用UaExpert验证。