2016-11-04 2 views
0

Мой общий вопрос: какой самый распространенный способ включить библиотеки на другие языки в приложении C?Включить библиотеки на других языках в приложении C

Например, если у меня есть библиотека Ruby, предназначенная для выполнения функции X и библиотека Python для ведения функции Y, как я могу написать программу на C (языке, то есть), который использует функции в каждом?

Я видел обертки, которые предоставляют доступ к библиотекам C на этих более высоких языках, но есть ли обертки, которые идут в другую сторону? Есть ли общий способ справиться с этим в целом?

ответ

1

Являются ли эти библиотеки с внутренним кодом (т. Е. Они были скомпилированы?) Или это исходные библиотеки (т. Е. Куча текстовых файлов, содержащих исходный код Ruby)?

Если первые, библиотеки на языке Ruby или Lua или так обычно имеют опубликованный двоичный интерфейс («ABI»). Это низкоуровневая документация, описывающая, как их библиотеки и ее функции работают под капотом. Часто они определены в C или C++, или любой язык использовался для реализации интерпретатора/компилятора для самого Ruby.

Поэтому вам нужно будет найти эту документацию и узнать, как вызвать интересующие вас части. На некоторых языках даже используется тот же ABI, что и в C, и вам просто нужно создать файл заголовка, соответствующий содержимое библиотеки, и вы можете вызвать ее напрямую (вот как вы интегрируете, например, ассемблер и C, или даже C++, которые вы можете получить для создания прямых функций C).

Если последнее, вам обычно нужно найти встраиваемую версию языка и узнать, как запустить скрипт из вашего приложения (например, как обычно используется Lua).

Но вы уверены, что вам нужны данные библиотеки Ruby? Часто общие библиотеки реализуются с использованием библиотеки C или C++ под капотом, а затем просто завертываются для языков сценариев, поэтому вы можете просто пропустить слой перевода сценариев и использовать (возможно, чуть более низкоуровневую) библиотеку самостоятельно.

PS - есть также автоматические генераторы оберток, такие как SWIG, которые будут читать файл на одном языке и написать код перевода для вас.

Смежные вопросы