Heim >Backend-Entwicklung >C++ >Wie bette ich Ressourcen (z. B. Shader-Code) in ausführbare GCC-Dateien ein?

Wie bette ich Ressourcen (z. B. Shader-Code) in ausführbare GCC-Dateien ein?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-29 11:52:10855Durchsuche

How to Embed Resources (e.g., Shader Code) into GCC Executables?

Einbetten von Ressourcen in ausführbare Dateien mithilfe von GCC

Problem:

Einbetten externer Binärdaten in eine C/C-Anwendung, die von kompiliert wurde GCC, insbesondere Shader-Code für eine effizientere Verteilung als einzelne ausführbare Datei Datei.

Lösungen:

GCC bietet zwei Lösungen:

  • Nutzung der Fähigkeit von ld, Dateien in Objekte zu konvertieren:
ld -r -b binary -o binary.o foo.bar

# Then link in binary.o

Dieser Befehl konvertiert die Datei foo.bar in eine Objektdatei (binary.o), die mit dem Programm verknüpft werden kann.

  • Verwendung von bin2c/bin2h-Dienstprogrammen:

Diese Dienstprogramme konvertieren alle Datei in ein Byte-Array umwandeln, das dann in das Programm eingebunden werden kann.

Aktualisiert Beispiel:

#include <stdio.h>

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

int main(void)
{
    // Get the resource size (workaround)
    unsigned int iSize =  (unsigned int)(&amp;_binary_foo_bar_end - &amp;_binary_foo_bar_start);

    printf("Resource size: %u\n", iSize);
    printf("Address of start: %p\n", &amp;_binary_foo_bar_start);
    printf("Address of end: %p\n\n", &amp;_binary_foo_bar_end);

    // Dump resource contents
    for (char* p = _binary_foo_bar_start; p != _binary_foo_bar_end; ++p) {
        putchar( *p);
    }

    return 0;
}

In diesem Beispiel wird die LD-basierte Lösung verwendet, um die Datei foo.bar in die ausführbare Datei einzubetten. Anschließend wird mithilfe einer Problemumgehung die Ressourcengröße abgerufen und der Ressourceninhalt an die Konsole ausgegeben.

Das obige ist der detaillierte Inhalt vonWie bette ich Ressourcen (z. B. Shader-Code) in ausführbare GCC-Dateien ein?. 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