在Linux上存储C++程序资源的位置在哪里?

7

这个问题说在Linux中存储设置的最佳位置是在~/.config/appname。

我正在编写的程序需要使用一个99MB的.dat文件来识别面部特征点,将它嵌入到二进制文件中似乎不是一个好主意。

在Linux上是否有默认的存储资源的位置?目前它只是在可执行文件旁边的目录中,但这需要在运行程序时当前目录为其所在的目录。

如何处理类似于这样的资源是Linux上最好的方式?(可能至少与OSX跨平台)


argv[0] 不是告诉你程序从哪里加载的吗? - Mark Ransom
1
@MarkRansom - 并不是普遍适用的。如果你通过execl(或类似函数)运行它,那么对于argv [0],你可以传递任何你喜欢的内容。它也会因符号链接等问题而感到困惑。 - Oliver Charlesworth
它是只读资源还是用户数据会被更新? - Galik
应用程序如何分发?当以源代码形式分发时,常规情况下由配置文件(或其他相关文件)负责。当以软件包形式分发时,它仅使用系统范围内硬编码的目录。 - SergeyA
1
这可能会有用:https://www.gnu.org/prep/standards/html_node/Directory-Variables.html - Galik
同时,https://dev59.com/v2855IYBdhLWcg3ww3Sa - genpfault
2个回答

4
你应该查看文件系统层次结构标准。根据数据的不同(它是否会改变,是否在所有安装中都是恒定的等),它被放置的路径将根据标准而改变。
通常情况下:
  • /usr/lib/program:包括应用程序的对象文件、库和内部二进制文件。
  • /usr/share/program:用于所有只读的架构无关数据文件。
  • /var/lib/program:保存与应用程序或系统相关的状态信息。
这些似乎是一个很好的起点,你可以查看文档以确定你的应用程序是否属于其中之一。

0

如果文件是特定于运行应用程序的用户,则应该位于~/的子目录中,但据我所知没有标准,最佳选择取决于文件类型/用途。如果用户可以通过GUI看到它,您可以使用~/Desktop或~/Downloads。如果它是临时的,您可以使用~/tmp或~/var/tmp。

如果不是特定的,则应将其放在/var的子目录中。同样,确切的子目录可能取决于其类型和其他因素。


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