在 IDL 文件上使用 opendds_idl 工具时出现致命错误 C1083
Posted
技术标签:
【中文标题】在 IDL 文件上使用 opendds_idl 工具时出现致命错误 C1083【英文标题】:Fatal error C1083 when using opendds_idl tool on IDL file 【发布时间】:2016-12-09 02:58:41 【问题描述】:我在使用 Windows 10 上的 opendds_idl 工具时遇到问题。
我已经使用 Visual Studio 2015 从 OpenDDS 源代码生成了 OpenDDS 库和工具,并启用了静态链接模式和 x64 平台。
使用命令行
opendds_idl file.idl
我遇到了一个错误
c1: fatal error C1083: Cannot open source file : '' : No such file or directory
tao-idli_2HJC0I.cpp
opendds_idl: preprocessor "CL.EXE" returned with an error
IDL 文件内容:
module BasicIOTest
#pragma DCPS_DATA_TYPE "BasicIOTest::TestData"
#pragma DCPS_DATA_KEY "BasicIOTest::TestData id"
struct TestData
long id;
string text;
;
;
【问题讨论】:
您是否从路径中包含 Visual Studio 2015 的 shell 运行 opendds_idl? opendds_idl 尝试调用 cl 作为预处理器。如果是这种情况,请尝试在命令行中添加 -v 以获取调试输出 感谢您的回答。是的,我确实从 Visual Studio 2015 命令提示符运行 opendds_idl。我终于成功编译了 IDL 文件。我将对我最初的问题发表一个回答。解决方法是使用另一个命令提示符。 【参考方案1】:其实我用的是VS2015 x64原生工具命令提示符,opendds_idl在格式化CL.exe命令行的时候好像出了点问题。
这是详细信息(使用 Johnny Willemsen 推荐的 -v 选项)
> opendds_idl -v TestData.idl
opendds_idl: preprocessing TestData.idl
opendds_idl: spawning: CL.EXE -D__TAO_IDL=0x060200 -I. -I. -nologo -E -I. -D__OPENDDS_IDL=0x030900 -D__OPENDDS_IDL_HAS_FIXED "-I"D:\path\to\thirdparty\OpenDDS "" C:\path\to\AppData\Local\Temp\tao-idli_ynmjvL.cpp
c1: fatal error C1083: Cannot open source file : '' : No such file or directory
tao-idli_ynmjvL.cpp
opendds_idl: preprocessor "CL.EXE" returned with an error
通过使用另一个 VS2015 命令提示符(VS2015 的开发人员命令提示符),我成功编译它没有问题。
详情:
>opendds_idl -v TestData.idl
opendds_idl: preprocessing TestData.idl
opendds_idl: spawning: CL.EXE -D__TAO_IDL=0x060200 -I. -I. -nologo -E -I. -D__OPENDDS_IDL=0x030900 -D__OPENDDS_IDL_HAS_FIXED -ID:\path\to\thirdparty\OpenDDS C:\paths\to\AppData\Local\Temp\tao-idli_lDpVP9.cpp
tao-idli_lDpVP9.cpp
opendds_idl: parsing TestData.idl
processing TestData.idl
opendds_idl: BE processing on TestData.idl
MODULE: CORBA
MODULE: BasicIOTest
STRUCT: TestData
这会是一个错误吗?
【讨论】:
不,这不是错误,opendds_idl 需要能够生成 cl,从 vs2015 命令提示符调用它是正确的方法。 我的意思是在VS2015的x64原生工具命令提示符下,CL.EXE的参数字符串好像没有很好的格式化。但是在其他命令提示符下,它的格式已经很好了。请参阅我在答案中发布的输出详细信息。 是的,我现在看到了,很奇怪,不知道是从哪里来的。也许在github.com/objectcomputing/OpenDDS 上打开一个问题?以上是关于在 IDL 文件上使用 opendds_idl 工具时出现致命错误 C1083的主要内容,如果未能解决你的问题,请参考以下文章
ATL/COM : 在 IDL 文件中我们可以创建一个可以用作返回类型的类