带有 Qt5 执行错误的 OpenSplice 创建失败:句柄无效
Posted
技术标签:
【中文标题】带有 Qt5 执行错误的 OpenSplice 创建失败:句柄无效【英文标题】:OpenSplice with Qt5 Execution Error Creation failed: invalid handle 【发布时间】:2017-03-03 09:30:12 【问题描述】:我正在尝试使用 Qt5 运行 OpenSplice 的教程示例。我成功构建了程序,但是当我运行它时出现以下错误:
DDS::DomainParticipantFactory::create_participant 中的错误:创建 失败:无效句柄
经过许多调试步骤后,我得出的结论是我的可执行文件没有链接到我的 ospl !我想通了,因为当它崩溃时不会生成 ospl-error.log。
我正确获取了发布文件 . ./release.com
并从同一个终端启动了我的 qtcreator,因此所有环境变量都已正确设置(尤其是 OSPL_URI
和 OSPL_HOME
)
有人知道如何解决这个问题吗?
【问题讨论】:
该错误表示您的代码无法连接到ospl。您是否使用单进程模型(其中 ospl 是您的应用程序的一部分)?否则,您将需要通过 ospl start 启动 ospl 守护进程。 我测试了这两种模型,我得到了同样的错误...... 【参考方案1】:我终于设法解决了这个问题并想到了分享答案。 问题是我在我的 .pro 中包含了所有 DDS 库,我包含了以下库:
unix:!macx: LIBS += -L$$PWD/../../PrismTech/Vortex_v2/Device/VortexOpenSplice/6.7.1/HDE/x86_64.linux/lib/ -lcmagent -lcmjni -lcmsoap -lcmxml -ldbmsconnect -ldcpsc99 -ldcpsccpp -ldcpsgapi -ldcpsisocpp -ldcpsisocpp2 -ldcpssac -ldcpssacpp -ldcpssaj -lddsconf -lddsconfparser -lddsdatabase -lddshts -lddsi2 -lddsi2e -lddskernel -lddsos -lddsosnet -lddsrmi -lddsrrstorage -lddsserialization -lddsuser -lddsutil -ldurability -lfacecpp -lleveldb-ospl -llzf-ospl -lnetworking -lnwbridge -lrlm913 -lrnr -lsigar-amd64-linux -lsnappy-ospl -lsnetworking -lspliced -lsqlite3-ospl -lstreamsccpp -lstreamsisocpp -lstreamssacpp
INCLUDEPATH += $$PWD/../../PrismTech/Vortex_v2/Device/VortexOpenSplice/6.7.1/HDE/x86_64.linux/include
DEPENDPATH += $$PWD/../../PrismTech/Vortex_v2/Device/VortexOpenSplice/6.7.1/HDE/x86_64.linux/include
我现在正在使用程序所需的最小库集,现在它可以完美运行。这是我现在使用的:
unix:!macx: LIBS += -L$$PWD/../PrismTech/Vortex_v2/Device/VortexOpenSplice/6.7.1/HDE/x86_64.linux/lib/ -lddskernel -ldcpsisocpp
INCLUDEPATH += $$PWD/../PrismTech/Vortex_v2/Device/VortexOpenSplice/6.7.1/HDE/x86_64.linux/include
DEPENDPATH += $$PWD/../PrismTech/Vortex_v2/Device/VortexOpenSplice/6.7.1/HDE/x86_64.linux/include
其实这个错误是由-ldcpsccpp和-lddshts引起的。通过删除这些库,应用程序可以完美运行。
【讨论】:
以上是关于带有 Qt5 执行错误的 OpenSplice 创建失败:句柄无效的主要内容,如果未能解决你的问题,请参考以下文章
错误的 ELF 类:如何成功安装 OpenSplice DDS?
带有 OpenGL 和 Kinect v2 的 QT5:错误的图像呈现