【问题标题】:Running c++ from Java problem从 Java 问题中运行 c++
【发布时间】:2010-07-28 15:53:20
【问题描述】:

我需要从 java 编译和运行一个 c++ 程序。我正在使用

进程a = Runtime.getRuntime().exec("g+​​+ -g function.cpp -o function"); 进程 b = Runtime.getRuntime().exec("./function");

问题是我从 c++ 程序获得的输出不正确,但如果我自己在命令行中编译并运行它,它就可以正常工作。问题是Java,我不知道为什么。

非常感谢

阿尔,

【问题讨论】:

  • “输出不正确”究竟是什么意思?

标签: java c++ command-line


【解决方案1】:

我在这里看到了一个明确且可能的问题。明确的问题是 Runtime.exec() 确实等待进程完成。所以你需要添加

a.waitFor();

在调用 b 之前。

可能的问题是,根据您调用此应用程序的方式,当前工作目录可能不是您认为的位置。所以function.cpp 可能不存在。

【讨论】:

    【解决方案2】:

    您是否在等待进程 A 完成后再运行进程 B?

    【讨论】:

    • 如果某个答案解决了您的问题,请点击左侧的复选框“接受”最佳答案。
    【解决方案3】:

    “输出...不正确”不能帮助任何人诊断您的问题。您绝对应该给出您期望的输出,以及您从 Java 中看到的输出。假设你的程序很小,你也应该发布它的源代码(因为这毕竟是关于编译过程的)。

    顺便说一句,当您导航到 Java 程序的工作方向,找到它生成的 function 可执行文件并自己从命令行调用它时会发生什么?现在输出正确吗?这个问题的答案会让你知道问题出在编译步骤还是执行步骤。

    如果是执行,我会冒险猜测环境(envvars、PATH 等)之类的东西,但如果没有更多信息就很难判断。

    此外,与涉及Processes 的所有问题一样,请查看these common pitfalls。看起来您至少正在制作其中一个(常见的不消耗输出),这可能会导致您的程序在琐碎的 C++ 代码上工作,但在更大的代码库上死锁。

    您也根本没有检查编译步骤的输出(返回值或 stdout/stderr 流),因此您不知道编译是否成功 - 如果没有,什么(有用的)错误你从编译器得到的消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多