Linkage faible/weak linking : je n'y arrive pas !

ChachaChacha Membre
13:02 modifié dans Actualités #1
Salut,

À cette adresse : http://developer.apple.com/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html, on trouve l'exemple de code suivant :

<br />extern int MyWeakLinkedFunction() __attribute__((weak_import));<br /><br />int main()<br />{<br />&nbsp; &nbsp; int result = 0;<br /> <br />&nbsp; &nbsp; if (MyWeakLinkedFunction != NULL)<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; result = MyWeakLinkedFunction();<br />&nbsp; &nbsp; }<br /> <br />&nbsp; &nbsp; return result;<br />}<br />


Et bien même en faisant attention à  utiliser un MACOSX_DEPLOYMENT_TARGET à  10.3 ou 10.4, ça ne linke pas (undefined symbol _ MyWeakLinkedFunction). Ai-je oublié quelque chose ?


+
Chacha

Réponses

  • schlumschlum Membre
    13:02 modifié #2
    Cette fonction est définie où ?
  • ChachaChacha Membre
    13:02 modifié #3
    dans 1176977727:

    Cette fonction est définie où ?

    Nulle part; le but est de tester si une fonction existe avant de l'utiliser. Là  c'est un test avec une fonction qui n'existe pas.
  • schlumschlum Membre
    avril 2007 modifié #4
    dans 1176977821:

    dans 1176977727:

    Cette fonction est définie où ?

    Nulle part; le but est de tester si une fonction existe avant de l'utiliser. Là  c'est un test avec une fonction qui n'existe pas.


    Alors c'est normal  ;)
    Il faut que la fonction appartienne à  un Framework où elle n'existe pas forcément en fonction de la version...

    Mais il faut qu'elle existe tout de même au niveau de l'environnement de compilation.
  • ChachaChacha Membre
    13:02 modifié #5
    dans 1176977939:

    Alors c'est normal  ;)
    Il faut que la fonction appartienne à  un Framework où elle n'existe pas forcément en fonction de la version...

    Alors là  je ne comprends pas. Si elle n'existe pas, elle n'existe pas, non ?
  • schlumschlum Membre
    13:02 modifié #6
    dans 1176978013:

    dans 1176977939:

    Alors c'est normal  ;)
    Il faut que la fonction appartienne à  un Framework où elle n'existe pas forcément en fonction de la version...

    Alors là  je ne comprends pas. Si elle n'existe pas, elle n'existe pas, non ?


    Voir ce que j'ai ajouté au dessus (j'avais oublié de dire le plus important)... Il faut qu'elle existe au niveau de l'environnement de compilation.  ;)
  • schlumschlum Membre
    13:02 modifié #7
    En fait, l'intérêt c'est de dire : "voilà , je compile avec cette fonction / ce Framework qui existe sur ma machine, mais je voudrais qu'à  l'exécution sur une autre machine, ça ne plante pas si la fonction / le Framework n'est pas trouvé(e)"
  • ChachaChacha Membre
    13:02 modifié #8
    dans 1176978330:

    En fait, l'intérêt c'est de dire : "voilà , je compile avec cette fonction / ce Framework qui existe sur ma machine, mais je voudrais qu'à  l'exécution sur une autre machine, ça ne plante pas si la fonction / le Framework n'est pas trouvé(e)"

    Ok merci.
    Je trouve ça bizarre... en même temps je n'ai que de faibles connaissances en linkage, namespaces, chargement dynamique et problématiques associées.

    +
    Chacha
  • schlumschlum Membre
    avril 2007 modifié #9
    Le compilateur a besoin d'avoir au moins la définition de la fonction pour pouvoir compiler  ;)

    Peut-être que la définition suffit...

    Essaie d'ajouter à  ton test :
    int MyWeakLinkedFunction();
    


    Edit : non, apparemment ça ne suffit pas au linker...
Connectez-vous ou Inscrivez-vous pour répondre.