Open62541的环境配置及其安装

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

  • 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,执行以下六步:

  1. 将你的找到你下载的源码所存放的位置,并粘贴其位置。

  1. 因为Cmake默认指定的编译路径是build,所以需要在你的源码中创建一个build文件夹,并且添加其路径。

  1. 首次编译需要点击Configure ,配置编译的对象,平台。

  1. 在完成上一步后会弹出4、5、6所处的对话框,因为我当时安装的是Visual studio 2017,所以勾选如图

  1. 其实此处默认是Win32,可以不指定

  1. 使用默认的native 编译器(如果需要编译到单片机中间,需要使用交叉编译的环境),点击Finish

2.2 首次编译后生成默认的工程

如果在箭头处报这个红,说明存在警告,但是此次的错误由Open62541的版本号引起可以忽略

2.3 以需要生成Example为例

此处需要注意我们我们不管其它的默认勾选项,但需要注意勾选UA_BUILD_EXAMPLES,同时取消勾选UA_BUILD_AMALGAMATION,这两个编译选项又冲突,将在后文描述。

  1. 勾选我们需要的UA_BUILD_EXAMPLES

  1. 点击Generate

  1. 点击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会提示如下信息

说明我们需要传递入口参数:

  1. 进入.\open62541-master\build\bin\examples找到刚刚生成的server_encryption.exe

  1. 将我们上文生成的两个证书(server_cert.der 、server_key.der)放置该目录下

  1. 如下图所示进入该文件夹,执行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验证。

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
目录 1 前言 7 1.1 编写目的 7 1.2 预期读者 8 2 数据库部署模式及选择建议 8 2.1 数据库部署模式 8 2.2 单机模式 8 2.3 HA热备模式 9 2.4 RAC模式 10 2.5 DATAGUARD模式 11 2.6 RAC+DATAGUARD模式 11 2.7 部署模式的选择建议 12 2.8 RAC部署模式应用建议 12 2.9 操作系统参数建议 13 2.9.1 AIX 13 2.9.2 HP 15 3 数据库设计考虑的因素 15 3.1 数据库类型特点分析 15 3.1.1 OLTP(联机事务处理) 15 3.1.2 OLAP(联机分析处理) 15 3.1.3 BATCH(批处理系统) 16 3.1.4 DSS(决策支持系统) 16 3.1.5 Hybrid(混合类型系统) 16 3.2 数据库规模 17 4 数据库部署前提建议 17 4.1 根据数据中心发布的推荐版本选择数据库产品 17 4.2 磁盘阵列布局原则 17 4.3 内存分配原则 19 5 数据库物理结构设计 19 5.1 软件安装路径及环境变量 19 5.2 数据库实例的命名规则 20 5.3 表空间设计 20 5.3.1 业务数据量的估算 20 5.3.2 表空间的使用规则 21 5.3.2.1 表空间的类型 21 5.3.2.2 表空间及其文件的命名规则 23 5.3.3 表空间的参数设置原则 25 5.3.3.1 数据表空间设置 25 5.3.3.2 临时表空间的存储参数(Oracle9i/10g) 26 5.3.3.3 Undo/temp表空间的估算 26 5.4 其他文件设计 26 5.4.1 参数文件 27 5.4.1.1 参数文件命名规则 27 5.4.2 控制文件 27 5.4.2.1 控制文件命名规则 28 5.4.3 重做日志文件 28 5.4.3.1 日志文件命名规则 29 5.4.4 Vote Disk 文件(RAC) 29 5.4.4.1 Vote Disk文件命名规则 30 5.4.5 OCR Disk文件(RAC) 30 5.4.5.1 OCR文件命名规则 30 5.5 初始化安装逻辑卷总计 30 6 数据库配置 31 6.1 数据库字符集配置 31 6.2 10g数据库参数设置 32 6.2.1 必须修改的初始化参数 32 6.2.1.1 DB_CACHE_SIZE 32 6.2.1.2 SHARED_POOL_SIZE 33 6.2.1.3 LARGE_POOL_SIZE 34 6.2.1.4 SGA_MAX_SIZE 34 6.2.1.5 DB_BLOCK_SIZE 34 6.2.1.6 SP_FILE 35 6.2.1.7 PGA_AGGREGATE_TARGET 35 6.2.1.8 PROCESSES 36 6.2.1.9 OPEN_CURSORS 36 6.2.1.10 MAX_DUMP_FILE_SIZE 36 6.2.1.11 PARALLEL_MAX_SERVER 36 6.2.1.12 PARALLEL_EXECUTION_MESSAGE_SIZE 37 6.2.1.13 FAST_START_MTTR_TARGET 37 6.2.1.14 INSTANCE_GROUPS(RAC) 37 6.2.1.15 PARALLEL_INSTANCE_GROUP(RAC) 38 6.2.1.16 与DRM有关的隐藏参数(RAC) 38 6.2.1.17 SESSION_CACHED_CURSORS 39 6.2.1.18 BACKUP_TAPE_IO_SLAVES 39 6.2.1.19 LOG_ARCHIVE_DEST_1 39 6.2.2 不得修改的初始化参数 40 6.2.2.1 COMPATIBLE 40 6.2.2.2 CURSOR_SHARING 40 6.2.2.3 SGA_TARGET 40 6.2.3 建议不修改的初始化参数 41 6.2.3.1 UNDO_RETENTION 41 6.2.3.2 SESSIONS 41 6.2.3.3 TRANSACTIONS 42 6.2.3.4 DB_KEEP_CACHE_SIZE 42 6.2.3.5 LOCK_SGA 43 6.2.3.6 DB_FILES 43 6.2.3.7 DB_FILE_MULTIBLOCK_READ_COUNT 43 6.2.3.8 LOG_BUFFER 44 6.2.4 与并行操作有关的参数 44 6.2.5 Data Guard有关的参数 45 6.2.5.1 DB_UNIQUE_NAME 45 6.2.5.2 LOG_ARCHIVE_CONFIG 45 6.2.5.3 LOG_ARCHIVE_DEST_1 45 6.2.5.4 LOG_ARCHIVE_DEST_2 46 6.2.5.5 LOG_ARCHIVE_DEST_STATE_1 46 6.2.5.6 LOG_ARCHIVE_DEST_STATE_2 46 6.2.5.7 REMOTE_LOGIN_PASSWORDFILE 46 6.2.5.8 LOG_ARCHIVE_MAX_PROCESSES 46 6.2.5.9 FAL_SERVER 47 6.2.5.10 FAL_CLIENT 47 6.2.5.11 STANDBY_FILE_MANAGEMENT 47 6.2.5.12 LOG_FILE_NAME_CONVERT 47 6.2.5.13 DB_FILE_NAME_CONVERT 48 6.3 9i数据库参数的区别 48 6.3.1 需要单独设置的参数 48 6.3.1.1 CLUSTER_INTERCONNECTS 48 6.3.2 和10g设置要求不同的参数 49 6.3.2.1 LOG_BUFFER 49 6.3.2.2 DB_FILE_MULTIBLOCK_READ_COUNT 49 6.3.2.3 UNDO_RETENTION 49 6.3.3 9i中不存在的参数 49 6.4 数据库连接服务 50 6.4.1 专用服务器连接 50 6.4.2 共享服务器连接 50 6.4.3 连接服务建议 51 6.4.3.1 专用服务器连接 51 6.5 数据库安全建议 51 6.5.1 采用满足需求的最小安装 51 6.5.2 安装时的安全 52 6.5.2.1 删除或修改默认的用户名和密码 52 6.5.2.2 必须使用dbca创建数据库 53 6.5.3 用户及权限管理 53 6.6 ORACLE NETWORK 配置 53 6.6.1 监听器的使用配置原则 53 6.6.2 TNSNAMES的使用配置原则 54 6.6.3 RAC环境下TNSNAMES的配置 54 6.6.3.1 各节点启用负载均衡 54 6.6.3.2 各节点不启用负载均衡 55 6.7 其他设置 56 6.7.1 Sqlplus连接设置 56 6.7.2 AWR报告默认文件名设置 56 7 不推荐使用的10g新功能 57 7.1 ASM 57 7.2 FLASH BACK数据库 57 8 附件 57 8.1 Oracle参数说明 57 8.2 合规性检查 58
首先,openeuler是一个开源的操作系统,它基于Euler OS开发,并由开发者社区共同参与开发和维护。GCC(GNU Compiler Collection)是一个常用的编译器集合。 要在openeuler上安装GCC 9.3.0,可以按照以下步骤进行操作: 1. 打开终端,使用root或具有管理员权限的用户登录到openeuler系统。 2. 更新系统软件包列表,可以使用以下命令: ```shell sudo yum update ``` 3. 安装GCC及其依赖包,可以使用以下命令: ```shell sudo yum install gcc ``` 4. 检查GCC版本,确保已经安装成功,可以使用以下命令: ```shell gcc --version ``` 如果上述步骤无法安装GCC 9.3.0版本,可以尝试其他方法,如手动安装或使用软件包管理器(如dnf或zypper)来安装。 手动安装GCC 9.3.0的步骤如下: 1. 从GCC官方网站(https://gcc.gnu.org/)下载GCC 9.3.0的源代码包。 2. 解压下载的压缩包,可以使用以下命令: ```shell tar -xf gcc-9.3.0.tar.gz ``` 3. 进入解压后的目录,可以使用以下命令: ```shell cd gcc-9.3.0 ``` 4. 配置GCC的编译选项,可以使用以下命令: ```shell ./configure ``` 5. 编译并安装GCC,可以使用以下命令: ```shell make -j sudo make install ``` 6. 检查GCC版本,确保安装成功,可以使用以下命令: ```shell gcc --version ``` 以上是在openeuler系统上安装GCC 9.3.0的一般步骤,根据具体的操作系统版本和环境可能会有所不同。确保按照文档和官方指南提供的其他特定信息来安装和配置GCC。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值