您正在阅读的是旧版本但仍受支持的 ROS 2 文档。 Jazzy.

将 RQt 插件移植到 Windows

RQt 移植示例

下面是 ROS 2 移植的 qt_gui_core.

下面是 ROS 2 移植的 python_qt_binding.

Windows 10 的注意事项

TinyXML 第 1 版的问题

我无法成功使用 TinyXML。我在需要的地方升级到了 TinyXML-2。这是一个非常直接的改变。

结账 此公关 以获取移植到 TinyXML-2 的示例。

使用 __cplusplus 和需要 pluginlib 的代码

在某些地方,特别是在插件库的 ROS 2 移植中,使用了 __cplusplus 标志。遗憾的是,在 Windows 上,无论实际使用的是哪种 C++ 标准,Visual Studio 都无法正确设置该标记。请参见 本页 了解更多信息。

要设置它,需要添加编译选项 /Zc:__cplusplus.

例如,在 CMake 中可以这样做

目标编译选项(${项目名称} 公众 "/Zc:__cplusplus";)

构建工件的位置(安装前)

这只是在建造 qt_gui_cpp.在该软件包中,一个自定义命令依赖于软件包另一部分中的目标库。不过,该库在编译完成前不会安装。Windows 在 ${configuration} 目录中进行编译。例如

在 Linux 上 qt_gui_cpp.a 将在以下文件中构建:<ros2_ws>/build/qt_gui_cpp/src/qt_gui_cpp/

但在 Windows 上 qt_gui_cpp.lib 内置在 <ros2_ws>/build/qt_gui_cpp/src/qt_gui_cpp/Release 中。

在这种情况下,为实现跨平台兼容性,请使用 CMake 生成器表达式.但是,当您需要链接一个库时,请务必使用 $<TARGET_LINKER_FILE:_target>; 而不是 $<TARGET_FILE:_target>;.后者会发现 .dll 文件,这些文件在 Windows 上无法链接。查看 此处举例.

编译器和链接器标志

一般来说,在移植到 Windows 时,许多软件包可能会使用额外的编译器标志。您可以在 微软文档.C++ 编译器称为 cl.exe.

链接器标志参见 微软文档.链接程序名为 link.exe.

不过,CMake 实际上在变量中提供了许多这样的选项。这 StackOverflow 页面 包含一个很好的示例,说明如何查看脚本中可用的所有 CMake 变量。