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
Susan Sarandonoriginal
2024-12-14 15:07:11755parcourir

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

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.

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

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)

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!

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