Question assez abstraite ici, car je ne sais pas trop par où commencer mes propres enquêtes.
J’ai un paquet C construit avec CMake qui produit librpdb.so; J’ai une Ruby Gem configurée pour la même bibliothèque, qui produit rpdb.bundle.
Lorsqu’il est utilisé dans Ruby, je reçois ceci:
dyld: lazy symbol binding failed: Symbol not found: _RPDB_RuntimeStorageController_sharedInstance Referenced from: /usr/local/lib/ruby/gems/1.9.1/gems/rpdb-0.1.0/lib/rpdb/rpdb.bundle Expected in: flat namespace
Quand je regarde dans la bibliothèque, nm rapporte:
000000000000ea40 T _RPDB_RuntimeStorageController_sharedInstance
Il apparaît donc que le symbole est bien dans la bibliothèque. Pourquoi, alors, la liaison échouerait-elle?
En termes simples, les liens ne se produisaient pas au niveau de la première bibliothèque, bien qu’ils ne rapportent pas autant car les en-têtes ont été trouvés correctement.
Plus de détails sur la raison pour laquelle cela se produisait dans ma situation, ici
et aussi, ici