在Linux/MacOS上,通过双击来执行C++可执行文件。

5

我编写了一个C++软件,需要从所在文件夹读取文件,然后在同一文件夹中写入其他文件。

目前,我通过shell导航到已复制可执行文件的文件夹,然后使用./executable_name命令运行它。

我希望可以通过双击来执行它。如果我这样做,软件会告诉我找不到输入文件,就好像它没有在正确的文件夹中执行一样。

我认为有两种方法:

  1. 继续将可执行文件复制到工作文件夹,并告诉它在该文件夹中查找文件。
  2. 创建一个调用特定文件夹(如applications)中可执行文件的bash脚本,并将此脚本复制到工作文件夹中。然后告诉脚本以与工作文件夹中相同的方式执行软件。
  3. 也许你有更好的主意。

无论如何,我对如何实现这一点没有任何想法。

请有人能帮帮我吗?


1
我猜测你的应用程序没有考虑cwd()并忘记了切换到其预期的工作目录chdir() - Jesper Juhl
那是真的。你能再解释一下吗?比如说,我该怎么做呢?谢谢。 - philus
1
开始阅读我提到的两个函数的man页面。还要阅读这篇文章:https://dev59.com/KHNA5IYBdhLWcg3wgeId - Jesper Juhl
你的应用程序还没有设计用于图形用户界面交互。很难回答,因为这严重依赖于你想要使用的框架。无论如何,有很多类似的问题,可以参考https://unix.stackexchange.com/questions/32797/dragndrop-execute-functionality-in-kde作为例子。 - Jean-Baptiste Yunès
你可以在启动时打印出当前工作目录,如果需要的话,可以使用一些函数来确定自身的位置。但是在Linux中如何通过双击可执行文件来运行呢? - Mefitico
3个回答

2
在Linux上,你可以在你的g++编译器中添加-no-pie标志。
g++ main.cpp -o main -no-pie

difference between compiling with -no-pie and without it

这对于图形应用程序更有用,它们在终端上不显示任何内容。如果是您的情况,请继续进行。

这将创建一个可执行文件,您可以双击来执行。


0

大多数桌面软件应该使用当前工作目录(CWD)设置为可执行文件的位置来执行程序。大多数还支持桌面链接或快捷方式到程序,允许您自己设置CWD。这可能是最简单的路线,但这将取决于您正在运行的桌面环境。

您的下一个选择是编写一个shell脚本/批处理文件,在其自己的目录中执行您的程序:

#!/bin/sh
cd /path/to/program
./myprogram

然后从您的桌面执行它,而不是直接执行可执行文件。

最后,您可以使程序本身CWD(当前工作目录)无关。为此,您需要在将路径传递给系统调用的每个位置添加路径解析代码。首先,您需要知道可执行文件的位置。在C ++中没有符合标准的方法来做到这一点,但有特定于平台的方法。一旦您知道该路径,就可以针对该基本路径解析所有相对路径。关于如何做到这一点,StackOverflow上有几个现有的问题; 这里是一个起点


0
“双击执行”是一个含糊的操作,涉及到进程工作目录(pwd)。对于通过图形文件管理器启动的可执行文件,如果(pwd)应该是文件管理器当前选择的目录,还是文件管理器启动时的目录,没有严格的规定。
解决问题的唯一明确方法是将程序注册为操作目录的文件类型处理程序,以便在目录上下文菜单中显示(https://www.freedesktop.org/wiki/Specifications/mime-apps-spec/)。顺带一提,最好给你的程序提供接收目标目录作为命令行参数并在内部进行目录更改的功能。
将程序注册为文件类型处理程序还有一个好处,即可以在一个中央位置保留单个程序副本,无需复制任何东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接