将文件夹“嵌入”到C / C ++程序中

时间:2019-01-13 19:30:44

标签: c++ c embedding

我有一个脚本库存储在.../lib/中,我想将其嵌入到程序中。到目前为止,这听起来很简单:在Windows上,我将使用Windows资源文件-在MacOS上,我将它们放入Resource文件夹中,并使用适当的API来访问当前的包及其资源。在普通的Linux上,我不太确定该怎么做...但是,无论如何,我还是想成为跨平台的。

现在,我知道有类似IncBin(event target from the method itself)之类的工具,但是最好用于单个文件。但是,我所拥有的甚至可能需要某种文件系统抽象。

这是我所做的一些猜测和估计。我想知道是否有更好的解决方案-总体而言还是其他解决方案。

  • 创建一个Zip文件并使用MiniZ以便从char数组中读取其内容。基本上,通过IncBin运行zip文件,并将其作为缓冲区传递给MiniZ,以便我进行处理。
  • 使用诸如PhysicsFS或TTVFS之类的抽象FS层,并添加处理Zip文件或任何其他类型的存档的可能性。

还有其他解决方案吗?谢谢!

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,我通过相对于argv [0]定位库来解决了这个问题。但这仅在您通过程序的绝对路径调用程序时才有效-即,不是通过外壳程序中的$ PATH调用。因此,我通过〜/ bin中的单行脚本或搜索路径中的任何其他目录来调用程序:

exec / wherever / bin /程序“ $ @”

程序运行时,argv [0]设置为“ / wherever / bin / program”,并且知道在“ / wherever / lib”中查找相关脚本。

当然,如果直接安装到标准位置,则可以依赖标准目录结构,例如/ usr / local / bin / program是可执行文件,/ etc / program是相关脚本和配置文件。上面的技术只是在您希望能够将整个捆绑包安装在任意位置时。