1

我正在使用 GNAT GPS 2012。由于某些库,我必须使用“-mwindows”选项来成功链接我的程序(它实际上是混合的 Ada/C++)。

该程序在 2 种情况下运行良好:1)如果通过 GNAT 启动器启动它(我的意思是放置在工具栏顶部的三角形按钮) - 在这种情况下一切正常 2)如果从 windows cmd 或资源管理器单独启动“.exe”并且不要从 Ada 端输出任何文本。

但是(!)如果与 windows cmd 或资源管理器分开启动程序:1)调用 Put 或 Put_Line 函数 -> 程序立即完成(没有错误,没有异常,只是退出) 2)如果从 C++ 端调用 printf 它将是忽略

我在单独的混合 Ada/C++ 简单示例中确定,当“-mwindows”链接器选项添加到 Ada 链接器时会出现此问题。

我也尝试将 dll 从 GNAT 项目复制到 exe 文件夹,但没有帮助。

你们能帮帮我吗,伙计们?谢谢!

4

2 回答 2

2

这可能是由于未能启动 Ada RTL造成的。

我认为你想要的操作是adainit().

于 2012-08-07T03:57:02.980 回答
2

根据FSF GNAT User Manual-mwindows表示没有控制台;那么Put_Lineorprintf输出会去哪里呢?我的猜测是 Ada 调用引发了一个异常,它(默默地)结束了程序,而 C 调用实际上什么都不做。

不过,如果我是对的,我无法解释 GPS 中的行为。

于 2012-08-07T19:50:07.107 回答