Selon la façon dont vous créez vos liaisons une bibliothèque peut ne pas être même nécessaire:
- Manchettes écrit quelques interprète API spécifiques:
Par exemple, les extensions de rubis écrit en utilisant l'API IRM, sont essentiellement une bibliothèque partagée fournissant un:
void init_Modulename()
Cette fonction utilise alors l'api IRM comme rb_define_module, rb_define_class, rb_define_method, etc pour envelopper les API C/C++. Assurez-vous que cette fonction est entourée d'un "C" externe afin que son nom ne soit pas altéré au format C++.
Normalement, cette bibliothèque partagée est liée à la bibliothèque que vous liez, mais rien n'empêche qu'il s'agit de la même bibliothèque partagée.
- lors de l'exécution reliures de
Par exemple, en utilisant les liaisons FFI sur Ruby et d'autres interprètes. Les liaisons sont définies dans le même langage et c'est la bibliothèque FFI qui sait comment appeler les méthodes de la bibliothèque cible lors de l'exécution. Par conséquent, dans ce cas, les liaisons elles-mêmes n'ont pas de "bibliothèque".
- reliures de générateurs avec
Si vous utilisez un générateur, comme SWIG, il scanne les en-têtes de bibliothèque et de générer les liaisons pour les différentes langues. Selon la façon dont ces cibles sont implémentées par le générateur SWIG (par exemple, pour Ruby utilise l'API MRI décrite ci-dessus), SWIG créera du code que vous pouvez compiler dans sa propre bibliothèque, mais tant que vous n'avez pas de conflits de symboles, vous pourrait aussi bien compiler cela avec votre bibliothèque. Lorsque je veux dire des conflits de symboles, je ne parle pas de l'API elle-même, mais des assistants de liaison, comme init_Modulename().
Probablement pas, mais je ne sais pas réellement. –