C ++独立可执行文件

时间:2015-07-23 15:02:16

标签: c++ linux file

我用C ++编写一个程序,需要一个文件在当前目录中,但我想把它作为一个可执行文件分发。 Love2D为您创建cat文件的游戏使用分发方法,并使用love2d合并.love二进制文件和cat love2d awesomegame.love > awesomegame文件(例如#include <fstream> #include "ncat.h" using namespace std; int main () { ofstream ofile("ncat.exe", ios_base::out | ios_base::binary); for (unsigned long i = 0 ; i < ncat_exe_len; ++i) ofile << ncat_exe[i]; ofile.close(); return 0; } ) 。如何编写我的程序,以便它可以使用自身末尾的信息,并将其提取到文件中。

---更新---

感谢来自@Dawid的所有精彩帮助,我使用了比我最初建议的更干净的方法(如果你想这样做,请参阅我的回答)。这是我的最终源代码:

Get([FromODataUri] int key)

这是我使用的(二进制)文件:Demo using nextAll() in plugin

3 个答案:

答案 0 :(得分:5)

您可以使用xxd工具。它可以在C风格包含头文件中将二进制文件转储为十六进制。

例如

> echo test > a
> xxd -i a > a.h
> cat a.h
unsigned char a[] = {
  0x74, 0x65, 0x73, 0x74, 0x0a
};
unsigned int a_len = 5;

然后只需添加标题并使用aa_len

示例:

构建之前

xxd -i _file_name_ > _file_name_.h
程序中的

#include "_file_name_.h"
void foo() {
    std::ofstream file ("output.txt", std::ios_base::out | std::ios_base::binary);
    file << _file_name_; // I believe the array will be named after source file
}

答案 1 :(得分:0)

程序启动时,检查文件是否存在且是否正确。如果它不存在或不正确,请将文件的内容从变量(结构)写出到所需的文件。

答案 2 :(得分:0)

我明白了:

#include <string>
#include <fstream>

string OUTPUT_NAME = "output.txt";

using namespace std;

int main(int argc, char *argv[]) {
    bool writing = false;
    string line;

    ofstream ofile;
    ofile.open(OUTPUT_NAME);
    ifstream ifile (argv[0]);
    if (ifile.is_open()) {
        while (getline(ifile, line)) {
            if (writing) {
                ofile << line << endl;
            } else if (line == "--") {
                writing = true;
            }
        }
    }
    ofile.close();
}

要创建最终二进制文件,请复制原始二进制文件,然后键入echo -e "\n--" >> _binary_name_,然后键入cat _file_name_ >> _binary_name_