将文件添加到c ++可执行文件

时间:2018-02-16 02:51:04

标签: c++ g++ executable chmod

我正在将c ++文件编译为可执行文件。我正在使用

g++ -std=c++11 your_program.cpp -o your_program

编译程序,

sudo chmod a+x your_program

创建可执行文件。我有2个.txt文件和一个.csv文件,程序正常运行所需。每次运行可执行文件时,我都会收到说明文件未打开的声明。当我将它作为可执行文件时,有没有办法可以包含这些文件?这些文件都在同一个目录中。

2 个答案:

答案 0 :(得分:0)

  

每次运行可执行文件时,都会收到声明文件未打开的声明。

这可能是因为你使用与文件打开语句假设不同的当前目录来运行它。

不幸的是,没有保证标准库方法来获取可执行文件自己的目录。但是,使用C ++ 17文件系统库,您可以从(main函数)argv[0]形成完整路径,并删除该路径的最后一项。在大多数情况下将获取可执行文件的目录,然后您可以为支持文件形成绝对路径。

  

当我将这些文件作为可执行文件时,是否可以包含这些文件?

许多。

不同的操作系统为这样的资源(嵌入在可执行文件中的数据)提供了不同的API,可能很想使用它们。不幸的是,在标准库中没有抽象。这意味着它不易携带。

由于您的文件都是文本文件,因此您可以将它们简单地嵌入代码中作为字符串文字。

头文件的一种简单方法是这样的:

#pragma once

inline auto my_text()
    -> char const*
{
    char const* const s = R"unique-id(
blah
blah blah
blah blah blah
)unique-id";
    return s + 1;
}

答案 1 :(得分:0)

虽然代码中的字符串/数组文字是万无一失的,但通常有更好的方法。有一篇旧文章(Linux Journal,IIRC)专门处理这个问题。

这里有一篇关于它的文章:Gareus: Embedding Blobs in Binaries。这种技术是相同的,只需要小心处理跨平台问题。

抱歉,这是一个仅限链接的答案;完整的内容很容易在线搜索,而且在这里复制太多了。