J'ai ajouté une nouvelle fonction (Fuse_lowlevel_notify_inval_directory) dans la bibliothèque Fuse de l'espace utilisateur. La compilation et la création de libfuse.so est terminée sans erreur. Mais lorsque mon application essaie d'utiliser cette nouvelle fonction, l'éditeur de liens génère une erreur: référence non définie à `Fuse_lowlevel_notify_inval_directory 'collect2: ld a renvoyé 1 état de sortie
Quand j'ai vérifié avec nm
nm ../libfuse.so | grep inval
00000000000154ed T Fuse_invalidate
**000000000001e142 t Fuse_lowlevel_notify_inval_directory**
000000000001e26c T Fuse_lowlevel_notify_inval_entry
000000000001e1cb T Fuse_lowlevel_notify_inval_inode
T/t signifie que le symbole est présent dans la section de texte. s'il est en majuscule, le symbole est global (externe). Je soupçonne que c'est le problème. La nouvelle fonction ajoutée affiche t en minuscules tandis que d'autres fonctions plus anciennes ont des majuscules T. Une idée de ce que je pourrais faire de mal?
Une idée de ce que je pourrais faire de mal?
La fonction t
est en effet locale à la bibliothèque. Cela peut se produire pour un certain nombre de raisons. Les plus probables sont:
static
, ou-fvisibility=hidden
Et n'avez pas pas __attribure__((visibility("default")))
sur la fonction, ou--version-script=libfoo.version
) Qui masque toutes les fonctions, sauf celles qui sont explicitement exportées, et vous n'avez pas ajouté votre fonction à cette liste.--version-script
Pour limiter la visibilité des symboles.