我正在将c ++文件编译为可执行文件。我正在使用
g++ -std=c++11 your_program.cpp -o your_program
编译程序,
sudo chmod a+x your_program
创建可执行文件。我有2个.txt文件和一个.csv文件,程序正常运行所需。每次运行可执行文件时,我都会收到说明文件未打开的声明。当我将它作为可执行文件时,有没有办法可以包含这些文件?这些文件都在同一个目录中。
答案 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。这种技术是相同的,只需要小心处理跨平台问题。
抱歉,这是一个仅限链接的答案;完整的内容很容易在线搜索,而且在这里复制太多了。