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

Comment puis-je intégrer des ressources dans mon exécutable à l'aide de GCC ?

Susan Sarandon
Libérer: 2024-12-14 15:07:11
original
752 Les gens l'ont consulté

How Can I Embed Resources into My Executable Using GCC?

Intégration de ressources dans un exécutable à l'aide de GCC : un guide détaillé

Les applications C/C intégrées nécessitent souvent l'inclusion de données binaires externes, telles que code de shader, polices ou images. Cela peut présenter des difficultés lors de la distribution de l'application sous forme d'un seul exécutable. GCC fournit des solutions pour simplifier ce processus.

Option 1 : Utilisation de la génération de fichiers objets de ld

Une méthode consiste à exploiter la capacité de ld pour convertir n'importe quel fichier en fichier objet. Cela vous permet d'incorporer les données binaires dans votre application en tant qu'objet lors de la phase de liaison. Pour ce faire, utilisez la commande suivante :

ld -r -b binary -o binary.o foo.bar  # then link in binary.o
Copier après la connexion

Option 2 : Utiliser les utilitaires bin2c/bin2h

Une autre option consiste à utiliser un utilitaire bin2c/bin2h pour convertir le fichier externe dans un tableau d’octets. Ce tableau peut ensuite être inclus dans votre code en tant que constante, vous permettant d'accéder aux données binaires selon vos besoins.

Exemple : intégration de données à l'aide de ld -r -b Binary

Considérons l'exemple suivant, où nous avons un fichier nommé foo.bar contenant du texte :

foo.bar: This is an example text.
Copier après la connexion

Pour intégrer ce texte dans notre Programme C, nous pouvons utiliser le code suivant :

#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

Obtention de la taille de la ressource

Pour obtenir la taille de la ressource embarquée, vous pouvez utiliser le code suivant :

unsigned int iSize =  (unsigned int)(&_binary_foo_bar_end - &_binary_foo_bar_start)
Copier après la connexion

Conclusion

GCC fournit plusieurs méthodes pour intégrer des données binaires dans des exécutables C/C. Ces techniques simplifient la distribution d'applications compactes et autonomes qui intègrent des fichiers de ressources dans l'exécutable lui-même.

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