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

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

Linda Hamilton
リリース: 2024-12-18 16:32:25
オリジナル
776 人が閲覧しました

How Can I Seamlessly Embed Resources into Executables Using GCC?

GCC を使用して実行可能ファイルにリソースをシームレスに埋め込む

GCC によってコンパイルされた C/C アプリケーション内に外部バイナリ データを簡単に埋め込むには、次の方法を検討してください。

ld のオブジェクト作成の利用機能:

ld (リンカー) は、任意のファイルをオブジェクトに変換する機能を提供します。ファイルを埋め込むには、次のコマンドを実行します。

ld -r -b binary -o binary.o foo.bar  # then link in binary.o
ログイン後にコピー

これにより、次のようなシンボルを含むオブジェクト ファイル (「binary.o」) が作成されます。 as:

  • _binary_foo_bar_start
  • _binary_foo_bar_end
  • _binary_foo_bar_size

たとえば、これを使用して埋め込まれた単純なテキスト ファイルのコンテンツにアクセスするにはメソッド:

#include <stdio.h>

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

int main(void)
{
    // Print the contents of the embedded resource
    for (char* p = _binary_foo_bar_start; p != _binary_foo_bar_end; ++p) {
        putchar( *p);
    }

    return 0;
}
ログイン後にコピー

Bin2c/Bin2h ユーティリティの使用:

これらのユーティリティはファイルをバイト配列に変換します。結果の配列をコードに統合します。

ld オブジェクト作成の例:

リソースをオブジェクト ファイルに組み込む方法は次のとおりです:

ld -r -b binary -o foo.bar.o foo.bar
ログイン後にコピー

結果として得られるオブジェクト ファイルには以下が含まれますシンボル:

  • _binary_foo_bar_start
  • _binary_foo_bar_end
  • _binary_foo_bar_size

コード:

unsigned int iSize = (unsigned int)(&amp;_binary_foo_bar_end - &amp;_binary_foo_bar_start);
ログイン後にコピー

これは、リソース サイズを決定するための代替方法を提供します。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート