2012-04-05 7 views
5

これを行う方法を知っている唯一の方法は、ファイルを16進数のリソースファイルの内容を含む1バイト/ char配列のCソースファイルに変換することです。どのようにCにリソースファイルを埋め込むのですか?

これを行うには、より簡単な方法がありますか?

+5

どのプラットフォームですか? –

+0

@OliCharlesworth:私は、Eclipse 3.0.2を使用して独自の組み込みRTOSを実行しています – theanine

+2

この問題に対する答えは、使用しているツールチェーンの詳細に**依存していますコンパイラ、リンカ、実行形式など)。だからあなたはあなたの質問に可能な限り多くの細部を加えることがうまくいくでしょう。 –

答えて

3

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)も動作します。

+1

素晴らしい答え。ありがとう。 – theanine

+0

sizeofはどのように機能しますか?コンパイル時にsizeofが評価されないのですが、pubkey.sの内容は考慮されません。編集:strlenを意味しましたか? – thenickdude

2

あなたが記述した方法は、最高の/最も簡単な/最も移植性の高い方法です。クイックツールを書いて(または既存のものを探して)Cファイルを生成してください。 const(および可能であればstatic)のキーワードを正しく使用してください。そうしないと、プログラムが大量のメモリを浪費します。

0

私はこの前にこのようなものが必要でした。私はこれのためのツールを作成しました。 mkcreshttps://github.com/jahnf/mkcres)というpythonツールですが、これをgithubに載せています。

  • ドキュメントには少し欠けていますが、CMakeまたはプレーンメイクファイルを使用してドキュメントをビルドプロセスに統合する方法の例があります。
  • .jsonファイルをリソースファイル生成コンフィグレーションとして使用します。
  • リソースファイルの変更を検出して、必要に応じて対応するCファイルを自動的に再生成します( )。
  • 欠点:Python(2または3)が必要です
  • Upside:コンパイラ固有ではなく、すべてのC/C++コンパイラで動作するはずです。
関連する問題