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!