执行C++;可通过双击Linux/MacOS执行 < >我已经编码了一个C++软件,它需要从它所在的文件夹读取文件,而不是在同一个文件夹中写入其他文件。

执行C++;可通过双击Linux/MacOS执行 < >我已经编码了一个C++软件,它需要从它所在的文件夹读取文件,而不是在同一个文件夹中写入其他文件。,c++,linux,macos,directory,executable,C++,Linux,Macos,Directory,Executable,目前,我通过shell导航到复制可执行文件的文件夹,然后使用/executable\u name启动它 我想通过双击来执行它。如果我这样做了,软件告诉我它找不到输入文件,那就好像它没有在好的文件夹中执行一样 我认为有两种方式: 1) 继续复制工作文件夹中的可执行文件,并告诉它查找此文件夹中的文件。 2) 创建一个bash脚本,调用给定文件夹中的可执行文件(如应用程序),并将该脚本复制到工作文件夹中。然后告诉脚本执行软件,就像它在工作文件夹中一样。 3) 你可能有更好的主意 无论如何,我不知道怎么

目前,我通过shell导航到复制可执行文件的文件夹,然后使用
/executable\u name
启动它

我想通过双击来执行它。如果我这样做了,软件告诉我它找不到输入文件,那就好像它没有在好的文件夹中执行一样

我认为有两种方式: 1) 继续复制工作文件夹中的可执行文件,并告诉它查找此文件夹中的文件。 2) 创建一个bash脚本,调用给定文件夹中的可执行文件(如应用程序),并将该脚本复制到工作文件夹中。然后告诉脚本执行软件,就像它在工作文件夹中一样。 3) 你可能有更好的主意

无论如何,我不知道怎么做

有人能帮我吗


非常感谢

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

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

#!/bin/sh
cd /path/to/program
./myprogram
然后从桌面执行,而不是直接执行可执行文件

最后,您可以使程序本身不可知CWD。为此,您需要在向系统调用传递路径的任何位置添加路径解析代码。首先,您需要知道可执行文件的位置。在C++中没有标准的方法来实现这一点。一旦知道该路径,就可以根据该基本路径解析所有相对路径。关于StackOverflow,存在几个关于如何做到这一点的问题

“双击执行”对于进程工作目录(pwd)是一个非常模糊的操作。如果通过图形文件管理器启动的可执行文件的(pwd)应该是文件管理器中当前选择的目录,或者应该是启动文件管理器的目录,则没有严格的规范

解决问题的唯一干净方法是将程序注册为在目录上操作的文件类型处理程序,以便它显示在目录()的上下文菜单中。另一方面,最好让您的程序能够将目标目录作为命令行参数,并在内部更改目录


注册为文件类型处理程序有一个很好的副作用,即您可以将程序的一个副本保存在中心位置,而无需复制任何内容。

在linux上,您可以向g++编译器添加
-no pie
标志

g++ main.cpp -o main -no-pie

这对于在终端上不显示任何内容的图形应用程序更有用。如果这是你的情况,那就去做吧

这将生成一个可执行文件,您可以双击执行。

我猜您的应用程序没有考虑
cwd()
,并且忘记了
chdir()
到其预期的工作目录。这是真的。你能进一步解释一下吗?比如…我怎么能做到?感谢阅读我提到的两个函数的
man
页面。还要读一读:你的应用程序还不是为GUI交互而设计的。很难回答,因为这在很大程度上取决于您想要使用的框架。无论如何,有很多这样的问题,比如你可以让它在启动时打印当前的工作目录,如果需要的话,你可以使用一些函数来确定它自身的位置。但是,如何在linux中通过双击可执行文件来运行呢?