2015-04-16 7 views
1

Nous utilisons l'IAR Embedded Workbench pour créer des bibliothèques. Lorsque nous compilons un projet à l'aide de ces bibliothèques, nous sommes confrontés à un problème: si la couche application implémente une fonction du même nom qu'une fonction définie dans une bibliothèque, l'erreur 'duplicate definition' est notifiée lors de la compilation de l'application.Compilation de la bibliothèque IAR: supprimer/masquer les symboles internes et les API

Afin d'éviter ce type d'erreur, je veux juste savoir s'il y a un moyen de cacher les API internes et aussi les symboles internes (variables globales ...) de la bibliothèque compilée?

Nous vous remercions à l'avance

Répondre

0

Pour les fonctions internes et les variables qui sont utilisées uniquement dans l'unité de compilation unique, vous pouvez leur donner une liaison interne avec mot-clé static:

/*library.c*/ 
static int internalLinkageVar; 
static void internalLinkageFunc(void); 

Ce sera bien sûr fonctionne pas pour symboles qui doivent être accessibles à plusieurs fichiers .c dans la bibliothèque. Pour ceux qu'il est préférable d'utiliser le préfixe resonably longtemps sur le nom du symbole:

int MyLibrary_Private_Var2; 
void MyLibrary_Private_Func(void); 
+0

est-il pas une meilleure façon de le faire que « Il suffit de leur donner un nom plus »? Peut-être liaison partielle avec un fichier de direction? – TomE

+0

@TomE Je ne vois pas de moyen évident de faire des liens partiels, mais ma version IAR est un peu ancienne, et j'ai peut-être manqué quelque chose en parcourant le manuel. J'essaie d'éviter d'utiliser des fonctionnalités qui nécessitent un travail supplémentaire lors du changement de compilateur, donc simplement utiliser un nom plus long est souvent le chemin de moindre résistance. – user694733

+0

@TomE Comme solution de contournement; En supposant que vous n'utilisez pas la fonction app et la fonction lib dans la même unité de compilation, vous pouvez changer la fonction de l'application en nom plus long, mais utilisez '# define' pour créer un court alias pour l'usage local. Pas élégant, mais C n'est pas un langage parfait pour commencer. – user694733