Heim >Backend-Entwicklung >C++ >Wie kann ich Ressourcen in meine ausführbare GCC-Datei einbetten?

Wie kann ich Ressourcen in meine ausführbare GCC-Datei einbetten?

Linda Hamilton
Linda HamiltonOriginal
2024-12-19 11:41:17886Durchsuche

How Can I Embed Resources into My GCC Executable?

Einbetten von Ressourcen in ausführbare Dateien mit GCC

Bei der Entwicklung von C/C-Anwendungen mit GCC kann es praktisch sein, externe Binärdaten direkt einzubetten die ausführbare Datei. Dies vereinfacht die Verteilung, da keine separaten Ressourcendateien erforderlich sind.

Einbettungsfunktionen von GCC

GCC bietet zwei Hauptansätze für die Ressourceneinbettung:

  1. Verwenden ld:

    • Verwenden Sie die Option -r von ld, um externe Dateien in Objektdateien zu konvertieren.
    • Verknüpfen Sie diese Objektdateien mit Ihrem Programm, um auf die Binärdaten zuzugreifen.
  2. Verwendung von bin2c/bin2h Dienstprogramme:

    • Konvertieren Sie externe Dateien in C-Arrays, die Binärdaten darstellen.
    • Fügen Sie diese Arrays in Ihren Code ein und greifen Sie bei Bedarf darauf zu.

Beispiel mit ld

Hier ist ein detaillierteres Beispiel mit 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;
}

In diesem Beispiel wird eine Datei mit dem Namen foo.bar in eine Objektdatei (foo.bar.o) konvertiert mit:

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

Der Linker bezieht dann beim Erstellen der ausführbaren Datei foo.bar.o ein und ermöglicht so den Zugriff auf die Binärdaten über die Symbole _binary_foo_bar_start und _binary_foo_bar_end.

Größenbestimmung

Um die Größe der eingebetteten Ressource zu bestimmen, verwenden Sie:

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

Das obige ist der detaillierte Inhalt vonWie kann ich Ressourcen in meine ausführbare GCC-Datei einbetten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn