为什么我似乎无法通过双击来打开用 C++ 创建的可执行文件。
我有一个从 IDE 运行的文件,我想知道是否有办法将该文件设置为在单击它时打开终端,就像 Windows 上的 .exe 文件一样。
可能性:
我可以将 C++ 代码添加到我的源代码中以实现这一点。
配置我的电脑以打开它。
我尝试尽可能避免使用工具包,我最近在 Windows 上编译了一个应用程序(感谢我的表弟,他有一台装有 Windows 的电脑)
如果可以在 Linux 上的 Windows 上执行同样的事情就太好了,因为我们有 2 个版本的文件夹。
我希望这个基于终端的简单应用程序可以运行,而无需成为专家。
我添加了这一行:
系统(“gnome终端”);
它在终端上打开但只显示文件路径而不是实际程序有什么建议吗?
答案1
我希望您需要在 Linux C++ 编译器输出的文件上设置“可执行”位,但我认为出于安全原因,默认情况下不会这样做。
只需“cd”到你生成的可执行文件所在的目录即可
chmod +x myexecutable
用编译器输出的名称替换“myexecutable”。
然后尝试使用 ./myexecutable 运行它
我相信这也应该使程序可以通过鼠标点击以及控制台“运行”。
类似地,如果您需要运行命令“脚本”,您可以在脚本文件中尝试以下命令,将其保存为“myexe.sh”或类似名称:
#!/bin/sh
command1
command2
然后再次使用
chmod +x myexe.sh
这样您就可以通过单击它来运行脚本。
答案2
我认为你的问题的根源在于你并不真正了解终端仿真器和 Shell 之间的区别,以及 Linux 如何确定如何启动进程。
首先,有“终端模拟器”,在基于 Gnome 的环境中,这通常是 Gnome 终端。
然后是“Shell”,在 Linux 中通常是 bash,尽管也可以使用其他 shell。
“Shell” 在“终端仿真器”内运行。这种区别源自物理终端时代,物理终端是接收输入、以彩色方式显示文本等的硬件,而 Shell 是处理用户命令并根据给定命令管理其他进程的软件。
如今,我们拥有了可以显示任何图像的通用屏幕,因此我们不再使用物理终端,而是使用“终端仿真器”,一种模拟物理终端工作的软件,以及 Shell,它仍然是与以前相同的 ole' shell(当然,现代 shell 确实利用了软件终端仿真器的优势,例如不受纸张的物理限制等,但分歧仍然存在)。
“Shell” 并不总是在终端仿真器内运行;还有图形 Shell,例如 Nautilus(提示,Nautilus 是一种有大壳的海洋生物的名字)或 Windows 资源管理器(不要与 Internet Explorer 混淆)。
在命令行 shell(例如 bash)和图形 shell(例如 Nautilus)中,可执行文件都通过设置其execute
位来标记。
在命令行 shell 中,您可以使用ls -l
来查看文件的权限位,例如 rwxrwxrwx 表示每个人都可以读/写/执行程序;rwxr-xr-- 表示所有者拥有完全权限,文件组中的人员可以读取和执行但不能写入,其他人只能读取该文件。在 Nautilus 中,您可以右键单击文件 > 属性 > 权限选项卡。在权限属性页中,您可以像在命令行 shell 中一样查看文件的权限。
设置了执行位的文件将被视为可执行文件,可以通过执行 ./filename(命令行 shell)或双击(图形 shell)来执行。
最后,关于 shell 如何执行文件,还有一些其他的微妙之处。在大多数 Linux shell 中,你可以“执行”用 python/perl/php/bash 编写的脚本,这些脚本不是编译后的可执行文件。由于这些文件不是本机编译的可执行文件,因此需要解释器(例如 python 解释器)才能执行。与 Windows shell(Explorer)不同,它通过文件的扩展名找出要调用的解释器;Linux shell 通过查看如下所示的“hashbang”行来找出正确的解释器
#!/usr/bin/python
当设置了文件的执行位并且文件具有此 hashbang 行时,shell 将使用当前文件作为参数调用解释器 /usr/bin/python。
Nautilus 还可以识别程序是否为命令行应用程序,并会提示您在终端内运行该应用程序。双击可执行脚本时,Nautilus 会询问您是否要在终端中运行它、在非终端中运行它,还是在文本编辑器中编辑该文件。
答案3
编写一个脚本,在 xterm 或其他程序中执行它。确保程序在结束前与用户交互。(在 xterm 中运行它时它能正常工作吗?在典型的 bash shell 中运行它时它能正常工作吗?)
xterm -e 命令[args1 args2]
答案4
如果您已经在 Windows 上编译了它并且它是一个 exe,我认为当您双击可执行文件时,Windows 上没有理由不打开终端。您确定代码没有关闭(段错误等)吗?确保程序不会崩溃是个好主意。