Обычно SWIG (Упрощенная Обертка и Генератор Интерфейса) - это путь. SWIG HOMEPAGE
Таким образом, вы можете написать код на C / C ++ и определить, какой интерфейс вы хотите предоставить.
Предположим, у вас есть некоторые функции C, к которым вы хотите добавитьTcl:
/* File : example.c */
#include <time.h>
double My_variable = 3.0;
int fact(int n) {
if (n <= 1) return 1;
else return n*fact(n-1);
}
int my_mod(int x, int y) {
return (x%y);
}
char *get_time()
{
time_t ltime;
time(<ime);
return ctime(<ime);
}
Теперь, чтобы добавить эти файлы на ваш любимый язык, вам нужно написать «файл интерфейса», который является входом для SWIG.Файл интерфейса для этих функций C может выглядеть следующим образом:
/* example.i */
%module example
%{
/* Put header files here or function declarations like below */
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
%}
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
В командной строке UNIX введите следующее:
unix % swig -tcl example.i
unix % gcc -fpic -c example.c example_wrap.c \
-I/usr/local/include
unix % gcc -shared example.o example_wrap.o -o example.so
unix % tclsh
% load ./example.so example
% puts $My_variable
3.0
% fact 5
120
% my_mod 7 3
1
% get_time
Sun Feb 11 23:01:07 2018
Команда swig создает файл example_wrap.c, который долженбыть скомпилированы и связаны с остальной частью программы.В этом случае мы создали динамически загружаемое расширение, которое можно загрузить в интерпретатор Tcl с помощью команды load.
Взято из http://www.swig.org/tutorial.html