可执行文件的执行路径。它是否取决于可执行文件的调用位置?

可执行文件的执行路径。它是否取决于可执行文件的调用位置?

由于我还是 Linux 的新用户,我仍然发现一些行为,但无法判断它们是否是“正常”行为。我搜索了互联网,但找不到答案,我想是时候在这里提问了。

几周前,我安装了一款名为“Machinarium”的小游戏,并开始玩它……但几天后,当我想继续玩游戏时,却无法让游戏正常启动。由于我没有时间搜索,所以我放弃了。

但昨天我在开发自己的程序时,遇到了完全相同的情况。于是我搜索了一下,发现当我使用 Nautilus 的“列表视图”时,当我真正“进入”时,我可以运行该程序(即程序确实找到了声音、图像等资源)可执行文件夹,但我却无法在父文件夹中并将其展开到可执行文件夹来运行它。

为了说明这种行为,这里有两个屏幕截图。

  • 它不起作用如果从这里双击可执行文件 如果可执行文件从这里启动则不起作用
  • 它确实有效如果从这里双击可执行文件 如果可执行文件从这里启动,它确实有效

这确实是同一个“地方”,但由于当前文件夹不一样,Nautilus 视图略有不同,而且它似乎对程序产生了影响。

此外,当我通过以下方式创建菜单项时系统设置/主菜单对于可执行文件,它的行为就像可执行文件找不到资源一样(这就是为什么我无法第二次玩 Machinarium,因为我在第一次游戏后创建了一个菜单快捷方式)。

因此,我要求程序在运行时在其根目录下生成一个文本文件,然后我开始从不同的“父”文件夹启动它,以查看文本文件生成的位置。每次文件都生成在当前 Nautilus 视图的顶部文件夹中。

我希望看到它出现在可执行文件的同一文件夹中(当然,并不是因为我猜测发生了什么,但在此之前我希望看到它出现在 exe 文件夹中)。

  • 有人可以向我解释为什么它会这样工作吗(我猜这是正常的)?
  • 在创建程序时我应该如何解决这个问题(我应该检测 C++ 代码中的可执行路径,还是应该以不同于 Windows 的方式组织资源文件?)

答案1

这里有一个很好的问题,答案可以让你了解在哪里安装用户应用程序

要运行应用程序,必须设置可执行位。 也可以通过 Nautilus 的右键菜单 (属性 -> 权限)。

然后,您可以通过双击 Nautilus 或在终端中运行以下命令来运行任何可执行二进制文件或脚本(请注意./运行命令):

./path/to/executable/application

如果您的应用程序需要在其路径中运行,那么您需要首先通过执行以下命令将目录更改为此路径:

cd /path/to/executable
./application

为了简化此操作,您还可以创建一个启动器来运行该应用程序(例如这个答案以及其他许多人)

这就是我在 Machinarium 中所做的。

不建议将您自己的用户自定义文件放入/usr/bin。如果您以后升级系统,此目录可能会被覆盖,并且它通常不包含在备份解决方案中。相反,请在您的主目录中创建一个新目录:~/bin。您需要重新登录才能识别此目录。

答案2

是的。PATH 包含您输入命令时搜索的路径列表。如果您希望执行不在路径中的命令,则需要提供相对或绝对路径(例如./file或)。bin/file

此行为可能是一个错误。应用程序可能在其某个目录中执行一些文件(bin/例如),但假设该文件是从 machinarium 根目录执行的(调用bin/file假设目录位于当前目录中),因此如果您从另一个目录运行它,则将找不到该文件。

一种解决方法是在 PATH 中创建一个脚本,该脚本进入 machinarium 目录,然后执行它。

#!/bin/bash
cd /path/to/machinarium
./machinarium-or-whatever

只需将其命名为 machinarium 并将其放在您路径中的目录下(/usr/local/bin 或 /home 中的目录)。然后您可以从任何目录运行该命令。

相关内容