5

我知道如何做到这一点的唯一方法是将文件转换为具有单个字节/字符数组的 C 源文件,该数组包含十六进制资源文件的内容。

有没有更好或更简单的方法来做到这一点?

4

3 回答 3

3

这是我在 gcc-arm 交叉编译器中使用的一个好技巧;通过汇编语言文件包括一个文件。在此示例中,它是public_key.pem我包含的文件的内容。

公钥.s

 .section ".rodata"
 .globl pubkey
 .type pubkey, STT_OBJECT
pubkey:
 .incbin "public_key.pem"
 .byte 0
 .size pubkey, .-pubkey

对应的pubkey.h

#ifndef PUBKEY_H
#define PUBKEY_H
/*
 * This is a binary blob, the public key in PEM format,
 * brought in by pubkey.s
 */
extern const char pubkey[];

#endif // PUBKEY_H

现在 C 源代码可以包含pubkey.hpubkey.s用 gcc 编译并将其链接到您的应用程序中,然后就可以了。sizeof(pubkey)也有效。

于 2012-04-06T01:31:04.227 回答
2

您描述的方式是最好的/最简单的/最便携的。只需编写一个快速工具(或查找现有工具)即可为您生成 C 文件。并确保在执行此操作时正确使用const(并且可能static)关键字,否则您的程序将浪费大量内存。

于 2012-04-06T00:25:38.783 回答
0

不久前我需要这样的东西,我为此创建了一个工具。这是一个名为mkcres ( https://github.com/jahnf/mkcres )的 python 工具,我把它放在了 github 上。

  • 尽管缺少一些文档,但有一些示例说明如何使用 CMake 或普通 make 文件将其集成到构建过程中。
  • 将 .json 文件作为资源文件生成配置
  • 它可以检测资源文件的变化,并在必要时自动重新生成相应的 C 文件。
  • 缺点:你需要 python(2 或 3)
  • 好处:不是特定于编译器的,应该适用于每个 C/C++ 编译器。
于 2015-09-11T10:03:09.843 回答