open62541:构建 PubSub 示例时出错

Posted

技术标签:

【中文标题】open62541:构建 PubSub 示例时出错【英文标题】:open62541: Error when building PubSub example 【发布时间】:2019-07-26 22:06:04 【问题描述】:

目前,我正在尝试构建 open62541 实现的 PubSub 示例。我已经经历了几次documentation on how to build the examples,但我无法弄清楚。

我尝试编译 PubSub 教程示例。这包括 tutorial_pubsub_publish.c 和 tutorial_pubsub_subscribe.c 文件。克隆存储库后,我构建了如下库:

mkdir build 
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON - 
DUA_ENABLE_AMALGAMATION=ON -DUA_ENABLE_PUBSUB=ON ..
make

首先我编译了有效的发布示例:

gcc -std=c99 -o PubSub_Publish_Example open62541.c tutorial_pubsub_publish.c

然后,我尝试以同样的方式编译订阅示例:

gcc -std=c99 -o PubSub_Publish_Example open62541.c tutorial_pubsub_subscribe.c

这产生了很多错误-都说“没有这样的文件或目录(第一个错误是#include“ua_architecture_base.h”)然后我尝试用ua_architecture_base.h编译它并得到其他丢失的文件或目录错误等等……

我也尝试编译open62541的整个包含文件夹,但我也得到“没有这样的文件或目录”错误:

gcc -std=c99 -I /home/theresa/Desktop/open62541/include -o PubSub_Subscribe_Example open62541.c tutorial_pubsub_subscribe.c

我还注意到,在 open62541 master 提供的所有示例中,tutorial_pubsub_subscribe.c 文件是唯一不包含的示例 open62541.h 文件夹。相反,它包含一些其他头文件:

#include "ua_pubsub_networkmessage.h"
#include "ua_log_stdout.h"
#include "ua_server.h"
#include "ua_config_default.h"
#include "ua_pubsub.h"
#include "ua_network_pubsub_udp.h"
#ifdef UA_ENABLE_PUBSUB_ETH_UADP
     #include "ua_network_pubsub_ethernet.h"
#endif
#include "src_generated/ua_types_generated.h"
#include <stdio.h>
#include <signal.h>

那么如何编译和运行 tutorial_pubsub_subscribe.c 示例,为什么订阅者示例不包含 open62541 头文件?

【问题讨论】:

【参考方案1】:

我按照“使用 CMake for Windows 构建”的说明取得了成功。 使用 cmake-gui 我选择了(高级)功能:UA_BUILD_EXAMPLES、UA_ENABLE_PUBSUB、UA_ENABLE_PUBSUB_INFORMATIONMODEL、UA_ENABLE_PUBSUB_INFORMATIONMODEL_METHODS 和 UA_NAMESPACE_ZERO = FULL

【讨论】:

嘿@Andrew Cullen,订阅示例 exe 在哪里构建?我使用您的高级构建选项成功生成了 cmake,但在任何地方都找不到可执行文件?此外,我没有禁用默认启用的构建选项(如 UA_ENABLE_SUBSCRIPTIONS、UA_ENABLE_SUBSCRIPTION_EVENTS、UA_ENABLE_NODESET_COMPILER_DESCRIPTIONS、...)。我希望这没问题? 在“使用 CMake for Windows 构建”之后,我使用了 cmake-gui 并生成了一个 \build 文件夹。在这个文件夹中,我打开了 open62541.sln。解决方案内部是一个 \open62541\examples 文件夹,其中包含数十个 Visual Studio 项目。我打开了“tutorial_pubsub_publish.vcxproj”项目并构建了它。 exe 位于 \build\bin\examples\

以上是关于open62541:构建 PubSub 示例时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 Visual Studio 2017 构建 open62541 DLL

如何编译 Open62541 教程中的示例 xml 文件?

在 Windows 上使用 CMake 构建 open62541 失败

open62541 客户端断开连接时的 OPC UA 堆栈服务器端回调

如何在 uaexpert 中查看添加的 open62541 参数?

open62541:发布温度值