swig php пример
Primary tabs
Файл 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
- Log in to post comments
- 3027 reads