Question

Dans quelle mesure la liaison est-elle portable?

#pragma weak my_symbol

Je vois cette question: comment créer de la faiblesse link-work-with-gcc explique comment le faire fonctionner. Mais existe-t-il un bon moyen de faire cela de manière à ce que gcc ne soit pas nécessaire?

Quelle est la différence entre une liaison faible et la protection de la déclaration avec un #ifdef?

#ifndef my_weak_fn
    void my_weak_fn(){/* Do nothing */ return;}
#endif
Était-ce utile?

La solution

#pragma est, par définition, non portable.

Et la liaison faible est faite au moment du lien (assez étonnamment). Il permet à une fonction (ou à n’importe quel symbole, réellement) avec la même signature d’en remplacer une autre. Cela signifie qu'un fort sera choisi de préférence au faible, mais s'il n'y en a pas, le faible sera utilisé.

Les gardes à inclure sont effectués par le compilateur, pas par l'éditeur de liens, et ils ne permettent pas le repli sur un faible si le plus fort n'y est pas. Vous pouvez simuler le même comportement si vous contrôlez la source pour les deux fonctions (avec ifdef -ing pour une, ifndef -ing pour l'autre), mais ce n'est pas toujours le cas et c'est plus choisir entre deux fonctions fortes.

Une liaison faible vous permet d'effectuer des opérations telles que d'insérer votre propre malloc () / free () à des fins de débogage tout en assurant la liaison avec la bibliothèque qui les fournit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top