これを行う方法を知っている唯一の方法は、ファイルを16進数のリソースファイルの内容を含む1バイト/ char配列のCソースファイルに変換することです。どのようにCにリソースファイルを埋め込むのですか?
これを行うには、より簡単な方法がありますか?
これを行う方法を知っている唯一の方法は、ファイルを16進数のリソースファイルの内容を含む1バイト/ char配列のCソースファイルに変換することです。どのようにCにリソースファイルを埋め込むのですか?
これを行うには、より簡単な方法がありますか?
gcc-armクロスコンパイラで使用する素敵なトリックです。アセンブリ言語ファイルを介したファイルも含まれます。この例では、ファイルpublic_key.pem
の内容です。
pubkey.s今Cのソースは、pubkey.h
が含まgccでpubkey.s
をコンパイルし、アプリケーションにリンクすることができ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
対応
.section ".rodata"
.globl pubkey
.type pubkey, STT_OBJECT
pubkey:
.incbin "public_key.pem"
.byte 0
.size pubkey, .-pubkey
、およびそこに行く。 sizeof(pubkey)
も動作します。
素晴らしい答え。ありがとう。 – theanine
sizeofはどのように機能しますか?コンパイル時にsizeofが評価されないのですが、pubkey.sの内容は考慮されません。編集:strlenを意味しましたか? – thenickdude
あなたが記述した方法は、最高の/最も簡単な/最も移植性の高い方法です。クイックツールを書いて(または既存のものを探して)Cファイルを生成してください。 const
(および可能であればstatic
)のキーワードを正しく使用してください。そうしないと、プログラムが大量のメモリを浪費します。
私はこの前にこのようなものが必要でした。私はこれのためのツールを作成しました。 mkcres(https://github.com/jahnf/mkcres)というpythonツールですが、これをgithubに載せています。
どのプラットフォームですか? –
@OliCharlesworth:私は、Eclipse 3.0.2を使用して独自の組み込みRTOSを実行しています – theanine
この問題に対する答えは、使用しているツールチェーンの詳細に**依存していますコンパイラ、リンカ、実行形式など)。だからあなたはあなたの質問に可能な限り多くの細部を加えることがうまくいくでしょう。 –