В зависимости от того, как вы создаете свои привязки, библиотека может даже не понадобиться:
- Привязки, написанные для некоторых специфичных для интерпретатора API:
Например, расширения ruby, написанные с использованиемMRI API - это, по сути, разделяемая библиотека, обеспечивающая:
void init_Modulename()
Затем эта функция использует API-интерфейсы MRI, такие как rb_define_module, rb_define_class, rb_define_method и т. Д., Чтобы обернуть API C / C ++.Убедитесь, что эта функция окружена внешним символом «C», поэтому ее имя не искажается способом C ++.
Обычно эта разделяемая библиотека связывается с библиотекой, которую вы привязываете, но ничто не мешает им быть одинаковымиразделяемая библиотека.
- Привязки выполняются во время выполнения
Например, привязки с использованием FFI на Ruby и других интерпретаторов.Привязки определяются на одном языке, и именно библиотека FFI знает, как вызывать методы в целевой библиотеке во время выполнения.Поэтому в этом случае сами привязки не имеют «библиотеки».
- Связывания выполняются с генераторами
Если вы используете генератор, такой как SWIG, он будет сканировать заголовки библиотекии генерировать привязки для разных языков.В зависимости от того, как эти цели реализованы генератором SWIG (например, для Ruby используется API-интерфейс MRI, описанный выше), SWIG создаст код, который вы можете скомпилировать в свою собственную библиотеку, но если у вас нет конфликтов символов, выможет также скомпилировать это вместе с вашей библиотекой.
Когда я имею в виду конфликты символов, я имею в виду не сам API, а помощники привязки, такие как init_Modulename ().