SWIG

Генератор обёрток над C/C++ библиотеками для других (в основном скриптовых) языков.

Обычно генерирует 2 файла:

SWIG только генерирует файлы, но не занимается их конечной компиляцией, это нужно делать С/С++-компилятором.

В простых случаях может обрабатывать заголовочные файлы "как есть". Но обычно требуется дублировать описание интерфейса с поясняющими директивами как понимать тот или иной тип/параметры и т.п., чтобы правильно генерировать обёртки над ними в целевом языке.

В качестве целевых языков поддерживаются: Python, PHP, Java и прочие.

Важное замечание

SWIG временами неожиданно обрабатывает переходы между языками, например все структуры или неизвестные типы он обрабатывает только как указатели и не лезет внутрь.

Если C-функция принимает или возвращает структуры по значению - для неё генерируется обёртка с приёмом/возвратом стуктур/типов по указателю. Это может потребовать доп. менеджмента памяти со стороны целевого языка.
Имеет смысл почитать Basic-раздел документации.

Заметки

Отдельный интерфейсный файл

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

Можно включать заголовочный файл прямо в проект

В биндинге к небольшим проектам или проектам, откуда нужно импортировать всё - можно просто включить заголовочный файл с директивами.

/* File : interface.i */
%module mymodule
%{
#include "header.h"  # Эта строка будет включена в сгенерированный код и нужна чтобы код потом мог скопилироваться
%}
%include "header.h" # Эта строка включает заголовочный файл для разбора в качестве директив

C-структуры можно расширять методами

SWIG позволяет расширять C-структуры прикреплёнными функциями, чтобы представлять их как объекты с методами в целевом языке. документация

Ссылки