Heim >Backend-Entwicklung >C++ >Wie kann ich mithilfe von GCC Ressourcen nahtlos in ausführbare Dateien einbetten?

Wie kann ich mithilfe von GCC Ressourcen nahtlos in ausführbare Dateien einbetten?

Linda Hamilton
Linda HamiltonOriginal
2024-12-18 16:32:25773Durchsuche

How Can I Seamlessly Embed Resources into Executables Using GCC?

Ressourcen nahtlos in ausführbare Dateien mit GCC einbetten

Um externe Binärdaten mühelos in von GCC kompilierte C/C-Anwendungen einzubetten, sollten Sie die folgenden Methoden in Betracht ziehen:

Verwendung der Objekterstellung von ld Funktion:

ld, der Linker, bietet die Möglichkeit, jede Datei in ein Objekt zu konvertieren. Um eine Datei einzubetten, führen Sie den Befehl aus:

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

Dadurch wird eine Objektdatei („binary.o“) mit Symbolen erstellt, z als:

  • _binary_foo_bar_start
  • _binary_foo_bar_end
  • _binary_foo_bar_size

Zum Beispiel, um auf den Inhalt einer einfachen Textdatei zuzugreifen, die damit eingebettet wurde Methode:

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

Einsatz eines Bin2c/Bin2h-Dienstprogramms:

Diese Dienstprogramme konvertieren Dateien in ein Array von Bytes. Integrieren Sie das resultierende Array in Ihren Code.

Beispiel mit ld-Objekterstellung:

So integrieren Sie eine Ressource in eine Objektdatei:

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

Die resultierende Objektdatei enthält diese Symbole:

  • _binary_foo_bar_start
  • _binary_foo_bar_end
  • _binary_foo_bar_size

So greifen Sie auf die eingebettete Ressource in Ihrem Code zu:

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

Dies bietet eine alternative Methode zur Bestimmung die Ressourcengröße.

Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von GCC Ressourcen nahtlos in ausführbare Dateien 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