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
Libérer: 2024-12-18 16:32:25
original
775 Les gens l'ont consulté

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
Copier après la connexion

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;
}
Copier après la connexion

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
Copier après la connexion

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);
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal