swig php пример

Файл example.php :
$ cat example.cpp

/* File : example.cpp */
#include < stdio.h >

void printHelloWorld(void) {
printf("Hello world!\n");
}

Файл example.i:
$ cat example.i

/* File : example.i */
%module example
%{
/* Put header files here or function declarations like below */
extern void printHelloWorld(void);
%}

extern void printHelloWorld(void);

Создание модуля расширения :

swig -php5 -c++ example.i
g++ -I/usr/include -c example.cpp example_wrap.cpp
g++ -shared example.o example_wrap.o -o example.so

Возможные ошибки

Возможно, при первой сборке модуля, у Вас появятся сообщения, например:

example_wrap.cpp:741:18: фатальная ошибка: zend.h: Нет такого файла или каталога
компиляция прервана.

или

In file included from example_wrap.cpp:741:0:
/usr/include/php5/Zend/zend.h:781:29: фатальная ошибка: suhosin_globals.h: Нет такого файла или каталога
компиляция прервана.

или
другие файлы заголовков будут не найдены.

Вам просто нужно будет найти эти файлы заголовков и прописать до них пути.
Например, вот так:

g++ -I/usr/include/php5/Zend -I/usr/include -c example.cpp example_wrap.cpp

Тестирование

После того, как все необходимые заголовочные файлы для сборки будут найдены, и до них будут правильно прописаны пути, будет создан подключаемый модуль для PHP (example.so).

Прописываем его в php.ini, в разделе подключения модулей:

extension=example.so

Проверяем, что модуль был успешно загружен:
$ php -m | grep example

example

Проверяем работу модуля на тестовом примере:
$ php -r 'printHelloWorld();'

Hello world!

-----------------------

<?php
printHelloWorld();
?>

Источник: forum.php.su/topic.php?forum=71&topic=6939