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
Freigeben: 2024-12-29 11:52:10
Original
884 Leute haben es durchsucht

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
Nach dem Login kopieren

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;
}
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage