【问题标题】:No console application on LinuxLinux 上没有控制台应用程序
【发布时间】:2020-07-12 21:26:21
【问题描述】:

在 Windows 上,我通常会创建一个 Windows 桌面应用程序,这是因为控制台应用程序会在屏幕上显示一个简短的黑框。

我在 Linux Mint 上使用 CodeBlocks,但在 Linux 上,我怎么能做与上述相同的操作?

我不想在显示终端窗口后隐藏它。

【问题讨论】:

  • 在 Linux 上没有这样的“控制台应用程序”,因为应用程序不会(在大多数情况下)为自己打开控制台窗口。不存在导致任何此类事情发生的通用应用程序属性。 很多应用程序希望将其标准流用于其主要 UI,但这与在任何屏幕上显示任何类型的窗口无关。事实上恰恰相反。
  • 我想你只是想从终端运行你的程序。
  • @JohnBollinger 我认为他看到的是在 Linux 的窗口系统中双击“vanilla”C++ 可执行文件......通常会打开一个控制台窗口......这非常相似双击 Windows 中的“控制台”应用程序。 QT 有某种魔法可以防止控制台窗口打开 IIRC。
  • 在 Linux 上,您可以通过 GUI 启动,在这种情况下不应该有任何类型的控制台窗口,或者您从控制台本身启动,在这种情况下可以有一些直接的控制台输出在用户选择的shell和终端程序中
  • @tadman 因此,如果我执行 ./myProgram 或双击该文件,如何确保屏幕上没有任何内容,无论是终端还是 GUI?

标签: c++ c linux codeblocks


【解决方案1】:

Linux 没有与 windows 相同的“subsystem”概念:控制台和桌面应用程序之间没有区别或分离。当你在 Linux 上启动一个应用程序时,它不会打开控制台窗口,除非程序员明确地编程让它打开一个。

如果应用程序向stdoutstderr 写入任何内容,会发生什么取决于应用程序究竟是如何启动的。默认情况下,应用程序继承其父进程的stdoutstderr。如果应用程序是从终端启动的,则输出将在终端上可见。如果应用程序是由桌面环境从菜单项启动的,则输出可能会进入日志文件,否则可能会丢失。

如果您在从 IDE 运行程序时看到一个终端窗口打开,那是 IDE 正在为您做的事情,而不是您的应用程序。如果它困扰您,我认为 IDE 有办法在设置中禁用此行为。

【讨论】:

  • 不仅仅是 IDE.... 这也发生在 Gnome、KDE ​​等中。
  • 站点注释:如果 Linux 应用程序确实以某种方式打开了一个终端窗口,那将会非常奇怪和烦人。
  • @JoelFan 你是什么意思?如果单击 Gnome/KDE 系统菜单项会在终端仿真器中打开应用程序,这是因为该菜单项被配置为打开终端仿真器。这由 .desktop 文件中的Terminal 设置控制specifications.freedesktop.org/desktop-entry-spec/…
  • @Joni,我说的是直接双击可执行文件
【解决方案2】:

研究 QT。它是一个适用于 Linux 的 GUI 框架。

您可以在不创建主窗口的情况下编写代码(或者您可能必须有一个主窗口,但它总是可以隐藏......我已经有一段时间没有使用它了)。

但请注意,您可能会遇到此类设计的可用性问题...用户无法知道您的应用是否已启动或是否成功、何时完成等。

【讨论】:

    【解决方案3】:

    简单的方法是使用(例如)xterm [或gnome-terminal] 来获取终端窗口。

    然后,从 shell [手动] 调用您的程序:

    /path_to_my_program
    

    您可以配置代码块来为您执行此操作。

    或者,您可以添加一些保持默认窗口打开的代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    #include <sys/wait.h>
    
    int main()
    {
    
        pid_t pid = fork();
    
        if (pid != 0) {
            waitpid(pid,NULL,0);
            while (1) sleep(1);
        }
    
        long double n;
        n=5;
        printf("n= %Lf\n",n);
    
        return 0;
    }
    

    更新:

    可以从以下位置控制调用命令:Settings -&gt; Environment -&gt; General Settings

    默认是在xterm 子窗口[弹出] 中调用。您可以更改设置以(重新)使用现有的 [终端] 窗口。

    请注意 [a codeblocks program] cb_console_runner 被使用。你可以用你喜欢的东西来代替它。

    我不想要 GUI 也不想要终端弹出...

    你需要一些类的终端来运行命令。这个可能是一个脚本,可以适当地转移stdin/stdout/stderr [并禁止调用sub-window],所以你必须尝试一下。

    正如我上面提到的,您可以在代码块之外打开一个终端窗口,然后在其中手动运行命令。从技术上讲,这不是一个弹出窗口。但是,您会丢失 [自动] 调试器调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      相关资源
      最近更新 更多