Maison >développement back-end >C++ >Comment puis-je intégrer de manière transparente des ressources dans des exécutables à l'aide de GCC ?

Comment puis-je intégrer de manière transparente des ressources dans des exécutables à l'aide de GCC ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-18 16:32:25776parcourir

How Can I Seamlessly Embed Resources into Executables Using GCC?

Intégrer des ressources de manière transparente dans des exécutables avec GCC

Pour intégrer sans effort des données binaires externes dans des applications C/C compilées par GCC, envisagez les méthodes suivantes :

Utilisation de la fonctionnalité de création d'objets de ld :

ld, l'éditeur de liens, offre la possibilité de convertir n'importe quel fichier en objet. Pour intégrer un fichier, exécutez la commande :

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

Cela crée un fichier objet ("binary.o") avec des symboles tels que comme :

  • _binary_foo_bar_start
  • _binary_foo_bar_end
  • _binary_foo_bar_size

Par exemple, pour accéder au contenu d'un simple fichier texte intégré à l'aide de ceci méthode :

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

Utilisation d'un utilitaire Bin2c/Bin2h :

Ces utilitaires convertissent les fichiers en un tableau d'octets. Intégrez le tableau obtenu dans votre code.

Exemple avec création d'objet ld :

Voici comment incorporer une ressource dans un fichier objet :

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

Le fichier objet résultant contient ces éléments symboles :

  • _binary_foo_bar_start
  • _binary_foo_bar_end
  • _binary_foo_bar_size

Pour accéder à la ressource intégrée dans votre code :

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

Cela fournit une méthode alternative pour déterminer la taille de la ressource.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn