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

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

Susan Sarandon
Susan SarandonOriginal
2024-12-14 15:07:11755Durchsuche

How Can I Embed Resources into My Executable Using GCC?

Einbetten von Ressourcen in ausführbare Dateien mithilfe von GCC: Eine detaillierte Anleitung

Eingebettete C/C-Anwendungen erfordern oft die Einbindung externer Binärdaten, wie z Shader-Code, Schriftarten oder Bilder. Dies kann bei der Verteilung der Anwendung als einzelne ausführbare Datei zu Herausforderungen führen. GCC bietet Lösungen zur Vereinfachung dieses Prozesses.

Option 1: Verwendung der Objektdateigenerierung von ld

Eine Methode besteht darin, die Fähigkeit von ld zu nutzen, jede Datei in eine Objektdatei zu konvertieren. Dadurch können Sie die Binärdaten während der Verknüpfungsphase als Objekt in Ihre Anwendung integrieren. Verwenden Sie dazu den folgenden Befehl:

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

Option 2: bin2c/bin2h-Dienstprogramme verwenden

Eine andere Möglichkeit besteht darin, ein bin2c/bin2h-Dienstprogramm zum Konvertieren zu verwenden die externe Datei in ein Array von Bytes. Dieses Array kann dann als Konstante in Ihren Code eingefügt werden, sodass Sie bei Bedarf auf die Binärdaten zugreifen können.

Beispiel: Einbetten von Daten mit ld -r -b Binary

Betrachten Sie das folgende Beispiel, in dem wir eine Datei namens foo.bar haben, die Text enthält:

foo.bar: This is an example text.

Um diesen Text in unser C einzubetten Programm können wir den folgenden Code verwenden:

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

Ermitteln der Ressourcengröße

Um die Größe der eingebetteten Ressource zu erhalten, können Sie den folgenden Code verwenden:

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

Fazit

GCC bietet mehrere Methoden zum Einbetten externer Binärdaten in ausführbare C/C-Dateien. Diese Techniken vereinfachen die Verteilung kompakter, eigenständiger Anwendungen, die Ressourcendateien in die ausführbare Datei selbst integrieren.

Das obige ist der detaillierte Inhalt vonWie kann ich mit GCC Ressourcen in meine ausführbare 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