[解決済み] GCC による C/C++: 実行ファイル/ライブラリへのリソースファイルの静的追加
2023-01-17 09:59:57
質問
GCC を使って、リソースファイルを実行ファイルや共有ライブラリファイルに静的にコンパイルする方法をご存知の方はいらっしゃいますか?
たとえば、私は決して変更されない (そして、もし変更されたら、どのみちファイルを交換しなければならない) 画像ファイルを追加したいのですが、それらをファイルシステムで寝かせておきたくありません。
これが可能であるなら (Windows 用 Visual C++ もこれを行うことができるので、私はそう思います)、自身のバイナリに格納されているファイルをどのようにロードすることができますか。実行ファイルが自分自身をパースし、ファイルを見つけ、そこからデータを抽出するのでしょうか?
もしかしたら、私がまだ見ていない GCC のためのオプションがあるかもしれません。検索エンジンを使用しても、本当に正しいものを吐き出すことはできませんでした。
私は、これが共有ライブラリと通常の ELF 実行可能ファイルのために動作することを必要とします。
どのように解決するのですか?
とは imagemagick :
convert file.png data.h
のようなものを与える。
/*
data.h (PNM).
*/
static unsigned char
MagickImage[] =
{
0x50, 0x36, 0x0A, 0x23, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x20,
0x77, 0x69, 0x74, 0x68, 0x20, 0x47, 0x49, 0x4D, 0x50, 0x0A, 0x32, 0x37,
0x37, 0x20, 0x31, 0x36, 0x32, 0x0A, 0x32, 0x35, 0x35, 0x0A, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
....
他のコードとの互換性を保つために、この後
fmemopen
で、"regular"を取得します。
FILE *
オブジェクト、またはその代わりに
std::stringstream
を作るには
iostream
.
std::stringstream
はあまり良いものではありませんが、もちろんイテレータが使えるところならどこでもポインタを使えばいいのです。
automake でこれを使う場合、忘れずに BUILT_SOURCES を設定します。 を適切に設定してください。
この方法のいいところは
- テキストを出力するので、バージョン管理やパッチを感覚的に行うことができる
- 移植性が高く、どのプラットフォームでもうまく定義できる
関連
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C-stringを使用すると警告が表示される。"ローカル変数に関連するスタックメモリのアドレスが返される"
-
[解決済み] 既に.objで定義されている-二重包含はない
-
[解決済み】CMakeエラー at CMakeLists.txt:30 (project)。CMAKE_C_COMPILER が見つかりませんでした。
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み] 警告:暗黙の定数変換でのオーバーフロー
-
[解決済み] Python の open() はファイルが存在しない場合、ファイルを作成しない
-
[解決済み] なぜGCCは、速度の代わりにサイズに最適化すると、15-20%速いコードを生成するのですか?
-
[解決済み】-Wl,-rpath -Wlがわかりません。
-
[解決済み] GCCをGMP、MPFR、MPC、ELFでバラバラにインストールする方法、共有ライブラリは不要ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン