本文默认以二进制方式安装好了 Fast DDS(安装包可以从官网获取,建议使用下载工具提速)。运行环境是Windows。

本文介绍了两种方法,一种是直接编译运行,另一种是从.idl文件编译运行。

准备工具

Visual Studio

方法一:直接编译运行

我为了防止权限问题,是在D盘里进行操作的。

我们进入路径\examples\C++,就可以愉快地看见很多示例项目,如下图:

我们点进去一个项目,我选择的是HelloWorldExample。 打开Readme.txt,它会提示你在命令行里运行HelloWorldExample.exe。

但是很显然,文件夹里只有HelloWorldExample.cxx等源文件,并没有HelloWorldExample.exe这个可执行文件。

这时候应该怎么办呢?当然是想办法编译了。

在命令行里直接编译容易出现找不到依赖项的问题,所以我推荐使用Visual Studio编译,更好地管理依赖包。

我们先来build一下。

以管理员身份运行PowerShell,输入以下代码:

mkdir build
cd build
cmake ..//cmake ..可以换成下面这句,这是官网的推荐
cmake -Bbuildexample -DFASTDDS_STATIC=ON .

可以看到这时候目录下多出了buildexample文件夹,在buildexample文件夹里面可以找到.sln文件。

用Visual Studio打开.sln文件,可以在左边栏看见四个项目。

在菜单栏点击生成->全部生成

可能会出现报错:

2>LINK : fatal error LNK1104: 无法打开文件“eProsima_p11.lib”

我经过寻找,发现整个电脑里并没有eProsima_p11.lib这个包。所以按照下面的流程操作即可。(从该博客魔改而来:LINK : fatal error LNK1104: 无法打开文件“XXXXX.lib”解决方法_King'sEngine的博客-CSDN博客_lnk1104无法打开文件lib)

右键HelloWorldExample项目:

依次点击:属性、链接器、输入

依次点击:图中展开箭头、编辑

在下图框出的地方寻找eProsima_p11.lib,找到了就直接删掉(在包名上双击、Delete)。

这样生成的时候,Visual Studio就不会去管那个不存在的eProsima_p11.lib包了。(什么叫暴力美学啊)

再次点击生成->全部生成

生成结果:

红线部分给出的是编译得到的.exe文件的路径。至此编译完成,下一步是运行。

回到文件夹界面,进入路径.\Debug。

我们可以看到,心心念念的HelloWorldExample.exe已经生成了。根据Readme的内容:

In the first one launch: ./HelloWorldExample publisher (or HelloWorldExample.exe publisher on windows).
In the second one: ./HelloWorldExample subscriber (or HelloWorldExample.exe subscriber on windows).

意思是,在两个命令行窗口中分别输入:

.\HelloWorldExample.exe publisher

.\HelloWorldExample.exe subscriber

就可以运行示例程序了。

所以我们在这个文件夹下,以管理员身份,分别打开两个PowerShell窗口,分别输入:

# 窗口1
.\HelloWorldExample.exe publisher# 窗口2
.\HelloWorldExample.exe subscriber

可能会出现警报,直接点“允许访问”。

运行效果如下,运行示例成功生成。

方法二:从.idl文件编译运行

eProsima Fast DDS-Gen 是一个 Java 应用程序,它使用接口描述语言 (IDL) 文件中定义的数据类型生成源代码。此应用程序可以执行两种不同的操作:

  1. 为自定义Topic生成C++定义。

  2. 生成使用Topic数据的功能示例。

本文介绍的是第二条,而第一条可以参照官方文档(进入链接) 。

同样的,我为了防止权限问题,在D盘里进行操作。

我们不妨把上文的HelloWorldExample文件夹的HelloWorld.idl单独复制出来,放到一个新的文件夹里。

其实我们可以打开.idl文件,看看里面写了什么。它的内容很简单,只有短短数行代码:

struct HelloWorld
{unsigned long index;string message;
};

它描述了一个Topic的内容,而刚刚提到的Fast DDS-Gen工具可以将.idl文件生成为项目的源代码,这是一个十分优雅的设计。

在该文件夹下,以管理员身份运行PowerShell,输入:

fastddsgen.bat -example CMake .\HelloWorld.idl

回到文件夹,我们发现一下子多出了很多文件。

用Visual Studio打开该文件夹。这次不用build就可以生成了。等待一段时间,Visual Studio会自动执行Cmake操作。

等到页面下方能够看到“Cmake生成完毕”字样(如上图)。接下来的内容就和上一章很像了:在菜单栏点击生成->全部生成

生成结果:

回到文件夹界面,进入路径.\out\build\x64-Debug (默认值),在该路径下能够找到HelloWorld.exe。

在这个文件夹下,以管理员身份,分别打开两个PowerShell窗口,分别输入:

# 窗口1
.\HelloWorld.exe publisher# 窗口2
.\HelloWorld.exe subscriber

可能会出现警报,直接点“允许访问”。

运行效果如下,运行示例成功运行

细心的话会发现两种方式的运行结果并不一样,原因会在接下来讲到。

结语

细心的小伙伴会发现,与官方给出的HelloWorldExample文件夹相比,直接从.idl生成的文件里少了HelloWorldPublisher.cpp、HelloWorldSubscriber.cpp两个文件。运行结果也有不同,官方文件能够做到自动收发消息、限制消息条数,而我们自己从.idl文件生成的程序无法做到。

这是因为以.idl文件生成源代码的方式,能够使项目以默认模式跑起来,与.idl文件本身的内容无关,下一步应该是在.idl生成的.h、.cxx文件里添加代码以实现功能,也可以新建.cpp文件进行编程。而官方的Examples已经在.h、.cxx、.cpp文件里写好了完备的代码。关于如何编程,可以查看官方教程:1.3. Writing a simple C++ publisher and subscriber application — Fast DDS 2.6.0 documentation

另外,了解.idl的数据结构,也有助于Topic的设计。官方教程:

5. Defining a data type via IDL — Fast DDS 2.6.0 documentation (eprosima.com)

Windows下运行Fast DDS示例程序(包含.idl文件的使用方法)相关推荐

  1. 可在网络不好的环境下运行的ENet示例程序

    本文是ENet的示例程序.因为仅是作为示例所以程序并没有做支持多请求处理. 一开始按照教程写程序,在网络好的情况下(本机和局域网),可以成功完成传输,但是网络差时就不行了. 用top监视时,发现程序消 ...

  2. 关闭windows hello然后尝试再次运行安装程序_蜂鸟E203系列——Windows下运行hello world例程...

    蜂鸟E203系列--Windows下运行hello world例程​mp.weixin.qq.com 创建 hello world 例程 选择file->new->C / C++ Proj ...

  3. 在Linux中某些程序无法运行,为何linux下的程序不能在windows下运行,不是“废话”那么简单...

    大家好,近期我发的文章都比较底层,过些天再发Linux基础方面的内容,多谢大伙儿的支持,回到正题. 您看,linux和windows都是运行在x86体系架构cpu上的操作系统,也就是指令的机器码都是一 ...

  4. Window环境运行Tensorflow目标识别示例程序

    Tensorflow提供了目标识别的API来支持通过各种深度学习网络实现目标识别的功能.通过访问Github项目https://github.com/tensorflow/models 可以看到Ten ...

  5. Windows SDK编程之一 窗口示例程序

    /*Win32应用程序框架主要由"初始化窗口类","窗口注册类","窗口的创建"以"窗口消息函数"等组成*/ #incl ...

  6. tinyxml 读取文本节点_在Windows下使用TinyXML-2读取UTF-8编码包含中文字符的XML文件...

    TinyXML-2 是一个用 C++ 开发的小巧.高效的 XML 解析工具,它在 GitHub 网站上的链接为: https://github.com/leethomason/tinyxml2 .它的 ...

  7. Windows下的JavaFX桌面应用程序打包ABC

    Windows下的JAVAFX桌面应用程序打包ABC 目录 Windows下的JAVAFX桌面应用程序打包ABC 谁会读这个文章 写作的目标 知识背景 JavaFx 模块化Java JavaFX打包的 ...

  8. VS2012下基于Glut 矩阵变换示例程序2:

    在VS2012下基于Glut 矩阵变换示例程序:中我们在绘制甜圈或者圆柱时使用矩阵对相应的坐标进行变换后自己绘制甜圈或者圆柱.我们也可以使用glLoadMatrixf.glLoadMatrixd载入变 ...

  9. [Setting]win7下运行exe失败:应用程序无法启动,因为应用程序的并行配置不正确

    win7下运行exe失败:应用程序无法启动,因为应用程序的并行配置不正确 1.问题描述 承接了一个项目,给甲方交接的时候,在它的电脑中运行出现了这个错误. 应用程序无法启动,因为应用程序的并行配置不正 ...

最新文章

  1. 【Paper】2022_基于无人驾驶地面车辆的多Agent系统仿真平台的设计及编队控制协议的研究
  2. 在python是什么意思_python 的 表示什么
  3. 处理硬件设备访问权限问题
  4. python爬虫程序框架的理论是什么_Python网络爬虫(scrapy框架简介和基础应用)
  5. Isolate -- Be Forget Feature Of The Object-Orient Programming
  6. Java程序员最厉害的是什么,「解密」谁是世界上最好的java程序员?
  7. 写给非网工的CCNA教程(1)IP地址和MAC地址
  8. rubyinstaller官网无法访问的解决办法
  9. C# dataGridView限制某一行的单元格只输入数字的方法之一
  10. 实验十七 通信录csv文件管理
  11. MYSQL数据库ANY的用法_数据库——IN、ANY、SOME 和 ALL 操作符的使用
  12. JS中的attribute和property的区别和联系
  13. python绘制各种摆线(包括心形线星形线等,超炫酷)
  14. Python3,5句话实现自动接收短信提醒
  15. Flex布局——flex-basis、flex-grow、flex-shrink
  16. 简单总结下opacity、transparent以及rgba
  17. win7系统忘记登陆密码的五种解决方法(图文)
  18. 免费微软认证考试券轻松拿
  19. 功能性近红外脑成像技术fNIRs开源网站
  20. 大学计算机导论怎么学,武汉大学珞珈学院《计算机导论》试卷(B)

热门文章

  1. 一个简单的RTMP服务器实现 --- RTMP实现要点
  2. 多闪上线满月 中国区iOS下载量已超500万
  3. Java编程学习入门、Java语言学习、Java入门必看
  4. SESSION-BASED RECOMMENDATIONS WITH RECURRENT NEURAL NETWORKS
  5. 音乐播放(游戏中的音效)
  6. Javascript中Uint8Array转base64字符串
  7. 数据科学实践 -- 考研帮爬虫 京东爬虫 电影推荐系统 等
  8. 实在智能RPA亮相2023全球人工智能技术博览会,“能对话的数字员工”引领智能自动化新篇章
  9. At32f421/gd32f103c6/stmf030
  10. 《人工智能》之《计算智能》