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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-12-14 15:07:11759ブラウズ

How Can I Embed Resources into My Executable Using GCC?

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

組み込み C/C アプリケーションでは、多くの場合、次のような外部バイナリ データを含める必要があります。シェーダー コード、フォント、またはイメージ。これにより、アプリケーションを単一の実行可能ファイルとして配布するときに問題が発生する可能性があります。 GCC は、このプロセスを簡素化するソリューションを提供します。

オプション 1: ld のオブジェクト ファイル生成を使用する

1 つの方法は、ld の機能を利用して、任意のファイルをオブジェクト ファイルに変換することです。これにより、リンク段階でバイナリ データをオブジェクトとしてアプリケーションに組み込むことができます。これを行うには、次のコマンドを使用します。

ld -r -b binary -o binary.o foo.bar  # then link in binary.o

オプション 2: bin2c/bin2h ユーティリティを使用する

もう 1 つのオプションは、bin2c/bin2h ユーティリティを使用して変換することです。外部ファイルをバイト配列に変換します。この配列を定数としてコードに組み込むと、必要に応じてバイナリ データにアクセスできるようになります。

例: ld -r -b Binary を使用したデータの埋め込み

次の例を考えてみましょう。ここには、テキストを含む foo.bar という名前のファイルがあります。

foo.bar: This is an example text.

Toこのテキストを C プログラム内に埋め込むには、次のコードを使用できます。

#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;
}

リソース サイズの取得

埋め込まれたリソースのサイズを取得するには、次のコードを使用します。以下を使用できますcode:

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

結論

GCC は、外部バイナリ データを C/C 実行可能ファイルに埋め込むための複数の方法を提供します。これらの手法により、実行可能ファイル自体にリソース ファイルが組み込まれたコンパクトな自己完結型アプリケーションの配布が簡素化されます。

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

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