RTI Connext DDS跨模块IDL引用报错:无法找到指定结构体类型
RTI Connext DDS 6.0.1 跨IDL模块引用报错解决方案
问题根源
你报错的核心原因是命令中使用了--ppDisable选项,这个参数会直接禁用IDL预处理器,导致Example2.idl里的#include "Example1.idl"指令完全不生效,rtiddsgen无法解析ExampleModule1::ExampleStruct1的类型定义,因此抛出类型未找到的错误。
解决方案
修正步骤
- 移除
--ppDisable选项:跨IDL文件的类型引用必须依赖预处理器处理#include指令,因此必须删除该禁用参数。 - 保留
-I idl路径配置:该选项已正确指定IDL文件的搜索目录,确保预处理器能找到Example1.idl。 - (可选)同时处理多个IDL文件:如果需要为
Example1.idl也生成Java代码,可以将两个IDL文件都作为命令参数传入,避免后续单独处理的麻烦。
修正后的generate.cmd命令
基础版本(仅处理Example2.idl,需确保Example1的代码已生成):
rtiddsgen -language Java -d generated idl/Example2.idl -I idl
完整版本(同时处理两个IDL文件,一次性生成所有相关代码):
rtiddsgen -language Java -d generated idl/Example1.idl idl/Example2.idl -I idl
验证结果
执行修正后的命令后,generated目录下会生成对应Java类:
- ExampleModule1包下的
ExampleStruct1.java - ExampleModule2包下的
ExampleStruct2.java,其中refStruct字段会正确引用ExampleModule1.ExampleStruct1类型。
内容的提问来源于stack exchange,提问作者Yuval Badihi
相关产品推荐
相关产品推荐

