ホームページ >バックエンド開発 >C++ >GCC 実行可能ファイルにリソースを埋め込むにはどうすればよいですか?

GCC 実行可能ファイルにリソースを埋め込むにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-19 11:41:17903ブラウズ

How Can I Embed Resources into My GCC Executable?

GCC を使用した実行可能ファイルへのリソースの埋め込み

GCC を使用して C/C アプリケーションを開発する場合、外部バイナリ データを実行可能ファイルに直接埋め込むと便利な場合があります。実行可能ファイル。これにより、個別のリソース ファイルの必要性がなくなり、配布が簡素化されます。

GCC の埋め込み機能

GCC は、リソースの埋め込みに対して 2 つの主なアプローチを提供します。

  1. 使用中ld:

    • ld の -r オプションを使用して、外部ファイルをオブジェクト ファイルに変換します。
    • これらのオブジェクト ファイルをプログラムにリンクして、バイナリ データにアクセスします。
  2. を使用するbin2c/bin2h ユーティリティ:

    • 外部ファイルをバイナリ データを表す C 配列に変換します。
    • これらの配列をコードに組み込み、必要に応じてアクセスします。

の例ld

ld を使用した詳細な例を次に示します。

#include <stdio.h>

extern char _binary_foo_bar_start[];
extern char _binary_foo_bar_end[];

int main(void)
{
    printf("Address of start: %p\n", &_binary_foo_bar_start);
    printf("Address of end: %p\n", &_binary_foo_bar_end);

    for (char* p = _binary_foo_bar_start; p != _binary_foo_bar_end; ++p) {
        putchar(*p);
    }

    return 0;
}

この例では、foo.bar という名前のファイルがオブジェクト ファイル (foo.bar.o) に変換されます。

ld -r -b binary -o foo.bar.o foo.bar

を使用すると、リンカーは実行可能ファイルをビルドするときに foo.bar.o をインクルードし、シンボル _binary_foo_bar_start および _binary_foo_bar_end によるバイナリ データ。

サイズの決定

埋め込みリソースのサイズを決定するには、次を使用します。

unsigned int iSize =  (unsigned int)(&_binary_foo_bar_end - &_binary_foo_bar_start);

以上がGCC 実行可能ファイルにリソースを埋め込むにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。