如何从依赖其他IDL文件的.idl生成FastDDS消息文件?
FastDDS IDL编译依赖问题解决
问题场景
消息文件目录结构如下:
msgs/ core/ - core.idl - geoCore.idl geometry/ - shape.idl
shape.idl依赖core.idl和geoCore.idl中的结构体,已在文件中添加引用:
#include "core.idl" #include "geoCore.idl"
运行FastDDSGen命令生成代码时:
fastddsgen /dir/to/geometry/shape.idl
出现以下错误:
WARNING (File shape, Line 8): Annotation topic not supported. Ignoring... ./dir/to/geometry/shape.idl:10:12: error: 'Core' was not defined previously ./dir/to/geometry/shape.idl:11:12: error: 'Point' was not defined previously ./dir/to/geometry/shape.idl:12:12: error: 'Ori' was not defined previously
其中Core、Point定义在core.idl,Ori定义在geoCore.idl。即使添加-I参数指定依赖文件夹:
fastddsgen /dir/to/geometry/shape.idl -I /dir/to/core/
错误依然存在。
解决方法
1. 修正IDL文件的引用路径
shape.idl中的#include需要对应文件的实际相对位置,修改为:
#include "../core/core.idl" #include "../core/geoCore.idl"
2. 正确设置包含路径
运行FastDDSGen时,将msgs目录(core和geometry的父目录)作为包含路径传入,确保预处理器能正确解析所有IDL文件:
fastddsgen /dir/to/geometry/shape.idl -I /dir/to/msgs/
3. 确认命名空间/模块引用
如果core.idl或geoCore.idl中的结构体定义在模块(如module Core)内,需在shape.idl中明确引用:
// 方式1:引入整个命名空间 using namespace Core; // 方式2:使用限定名访问结构体 struct Shape { Core::Point center; Core::Ori orientation; // ... 其他字段 };
内容的提问来源于stack exchange,提问作者Wellington Noberto
相关产品推荐
相关产品推荐

