Maison >développement back-end >C++ >Comment puis-je intégrer des ressources dans mon exécutable GCC ?

Comment puis-je intégrer des ressources dans mon exécutable GCC ?

Linda Hamilton
Linda Hamiltonoriginal
2024-12-19 11:41:17954parcourir

How Can I Embed Resources into My GCC Executable?

Intégration de ressources dans des exécutables avec GCC

Lors du développement d'applications C/C avec GCC, il peut être pratique d'intégrer des données binaires externes directement dans l'exécutable. Cela simplifie la distribution en éliminant le besoin de fichiers de ressources séparés.

Capacités d'intégration de GCC

GCC propose deux approches principales pour l'intégration de ressources :

  1. Utilisation ld :

    • Utilisez l'option -r de ld pour convertir des fichiers externes en fichiers objets.
    • Liez ces fichiers objets à votre programme pour accéder aux données binaires.
  2. Utiliser bin2c/bin2h Utilitaires :

    • Convertissez les fichiers externes en tableaux C représentant des données binaires.
    • Incluez ces tableaux dans votre code et accédez-y selon vos besoins.

Exemple avec ld

Voici un exemple plus détaillé utilisant ld :

#include <stdio.h>

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

int main(void)
{
    printf("Address of start: %p\n", &_binary_foo_bar_start);
    printf("Address of end: %p\n", &_binary_foo_bar_end);

    for (char* p = _binary_foo_bar_start; p != _binary_foo_bar_end; ++p) {
        putchar(*p);
    }

    return 0;
}

Dans cet exemple, un fichier nommé foo.bar est converti en fichier objet (foo.bar.o) using :

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

L'éditeur de liens inclut ensuite foo.bar.o lors de la construction de l'exécutable, permettant l'accès aux données binaires via les symboles _binary_foo_bar_start et _binary_foo_bar_end.

Détermination de la taille

Pour déterminer la taille de la ressource intégrée, utilisez :

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

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