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
Libérer: 2024-12-19 11:41:17
original
917 Les gens l'ont consulté

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 :

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

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

}

Copier après la connexion

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

1

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

Copier après la connexion

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 :

1

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

Copier après la connexion

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