2017-02-22 16 views
8

私は約17kbの情報を持っています。私のプログラムは、この文字列を生成したり、バッファに読み込んだりしません。データはすでに初期化されています。静的変数のように、コード内からコンパイルされた状態にしておきます。さらに、私はそれが私の実行可能ファイルの中にあり、プロジェクトファイルの中には格納されていない方が好きです。これまでにこのような問題に遭遇したことはありません。これを回避するにはどうすればよいでしょうか?膨大な量のデータストリームをリソースに含めるか、文字通りコピーして変数に貼り付ける必要がありますか?あなたは何をお勧めします?C++で膨大な静的変数を格納する

ld -r -b binary -o example.o example.txt 

結果を:

はそれが

+3

スティック、それはあなたがそれにアクセスできるようにヘッダではexternを置くファイル。そうすれば、まともなビルド環境でビルド環境を再構築することはできません。 – user4581301

+0

これは別のファイルに保存する必要があるため、ファイルが誤って配置される危険性を嫌い、.exe内に直接埋め込むことができます。 – DudeDudeDude

+3

@DudeDudeDude別の** '.cpp' **ファイルまだコンパイルされていて、それを省略するとリンクエラーが発生することを意味します。 – Angew

答えて

3

を重要ならばGNUリンカldが直接オブジェクトファイルの.dataセクションとしてカスタムデータを含める機能を持っているのVisualStudio C++ 2015を使用しています、言及するのを忘れましたexample.oファイルには、埋め込みデータの開始と終了にアクセスするためのシンボルが定義されています(ファイルの名前は、objdumpとなります)。

Visual Studioに付属しているリンカにも同様の機能があるのか​​どうかはわかりませんが、mingw経由でもCygwin経由でもGNUリンカを使用することができます(生成されたオブジェクトファイルは標準を参照しませんlibにはcygwinに付属のエミュレーションライブラリは必要ありません)。結果のオブジェクトファイルapparently can just be added to your sources like a regular source file。もちろん

データの変更が頻繁に...

別の方法としては以下のように、C列にファイルの内容を置く簡単なプログラムを書くことができる場合は、このマニュアルワークフローがあまりにも良いではありません。

unsigned char const * const data = { 
    0x12, 0x34, 0x56 }; 

もちろん、すでにこのようなプログラム(xdd)がありますが、利用可能かどうかはわかりません。 1つの潜在的な問題は、reach the limit for the length of string literals that wayです。これを回避するには、(多次元の)char配列を試すことができます。

(私はthis blog postとても役に立ったこの答えを書く。)他のcppで

関連する問題