C++ 如何在运行时(UNIX)中启用访问数据文件的共享对象

C++ 如何在运行时(UNIX)中启用访问数据文件的共享对象,c++,unix,file,shared-objects,C++,Unix,File,Shared Objects,我有一个类方法(在UNIX环境中的共享对象中实现),它需要在运行时访问文本数据文件(使用ifstream)。目前,该方法假定数据文件可以在没有任何相对路径的情况下打开,例如 ifstream dataFile("data.txt"); 共享对象是从python代码加载的,为了使其可用于加载,将其作为makefile的后期生成步骤复制到\usr\lib\文件夹中。我的问题是如何使文本数据文件可用于共享对象。我已考虑过下列可能性: 使用一些相对路径,但这种方法并不是完全可靠的(项目托管在不同的实

我有一个类方法(在UNIX环境中的共享对象中实现),它需要在运行时访问文本数据文件(使用ifstream)。目前,该方法假定数据文件可以在没有任何相对路径的情况下打开,例如

ifstream dataFile("data.txt");
共享对象是从python代码加载的,为了使其可用于加载,将其作为makefile的后期生成步骤复制到
\usr\lib\
文件夹中。我的问题是如何使文本数据文件可用于共享对象。我已考虑过下列可能性:

  • 使用一些相对路径,但这种方法并不是完全可靠的(项目托管在不同的实例上,我不能确定目录树在一个月后会保持不变)
  • 将数据文件也复制到
    \usr\lib
    ,但我觉得这是一种错误的态度

欢迎提出任何建议。

我可以想出两种解决方案:

  • 加载共享对象时,您会以某种方式为其指定文件的路径
  • 您可以在/usr/lib中创建符号链接,而不是将文件复制到/usr/lib,但这不是最好的做法

第一个解决方案对我来说是最好的。

正确的方法是将文本文件的位置设置为可配置的值,在安装项目时设置该值。在/etc/中使用配置文件是存储该值的常用方法

通过这种方式,您可以将文本文件放在/usr/share/中,与所有与机器无关的文件(该数据文件是与机器无关的,对吗?)一起使用,您的代码将“知道”在哪里可以找到它

请注意,如果数据文件将作为代码操作的一部分进行修改,那么根据文件系统层次结构标准(FHS)和大多数其他Unix文件系统标准,它可能应该放在/var(/var/lib或/var/cache)下


如果数据文件可以被视为一个配置文件,正如您在评论中提到的,您可以将其路径硬编码到/etc/(例如/etc/MyProject/data.cfg)下的某个位置,然后继续。

数据文件是否需要修改?@Ignacio Vazquez Abrams:是,可以将其视为一个内容文件,它允许在不需要重新编译的情况下进行某些配置更改。是的,它是独立于机器的。谢谢