Пишем своё расширение PHP на C. Часть 2: Windows

В предыдущей статье я рассказывал как скомпилировать свое расширение PHP под Linux. Теперь разберемся, ка сделать это же под Windows.

Исходные данные

•    Исходные коды расширения.
php_hello.c
php_hello.h
config.m4
config.w32
•    Исходные коды php интерпретатора в установлены каталоге (ссылка:  http://www.php.net/get/php-5.2.11.tar.bz2/from/a/mirror ): C:\php5_source
•    Откомпилированная сборка php интерпретатора установлена в каталоге (ссылка:  http://www.php.net/get/php-5.2.11-Win32.zip/from/a/mirror ):   C:\php5

Среда Visual Studio C++ 6.0 выбрана исходя из того что все остальные расширения  находящиеся в папке ext исходных кодов php интерпретатора собраны с ее помощью.

Несколько первых строк из файла проекта расширения gd.

Необходимо создать новый проект  Win32 dynamic dll.
Меню File->New

Рис.1
Выбираем тип проекта Win32 Dynamic-Link Library.

Рис.2

Сохранить проект в папку с остальными php расширениями. В каталог проекта скопировать файлы php_hello.c php_hello.h config.m4 config.w32. Результат на картинках далее.

Рис.3

Рис.4

Затем следует настроить проект.
Установить активную конфигурацию сборки. Set active configuration.

Рис.5
Активной конфигурацией должен быть Win32 – Release.

Рис.6

В свойствах проекта (Alt-F7) для конфигурации release .
Далее настройки компиляции. Category General.

Рис.7

Preprocessor definitions.
WIN32,_DEBUG,_WINDOWS,_MBCS,_USRDLL,PHP_HELLO_EXPORTS,ZEND_DEBUG=0,COMPILE_DL_HELLO,ZTS=1,ZEND_WIN32,PHP_WIN32
Должно получиться примерно так. Однако их могут быть и какие дополнительные еще препроцессорные определения.

COMPILE_DL_HELLO   –  выделена желтым часть имя нашего модуля. Допустим для модуля NEWMODULE будет так  COMPILE_DL_NEWMODULE.

Настройки компиляции. Code generation.

Рис. 8
Use run-time library. Выбрать Multithreaded DLL.

Также настройки компиляции. Category  preprocessor.

Рис.9
Additional include directories. ..\..,..\..\main,..\..\Zend,..\..\TSRM,..\..\bindlib_w32

Устанавливаем дополнительные каталоги для поиска *.h файлов относительно каталога с проектом.

Создать каталог C:\php_source\dev . Скопировать библиотеку php5ts.lib из откомпилированной сборки php интерпретатора (C:\php5\dev) той же версии в каталог C:\php_source\dev.

Настройки линковки.

Рис.10
Добавить в Object/Library modules ссылку на библиотеку php5ts.lib
Добавить в Additional library path путь к дополнительному каталогу для поиска lib файлов.

Добавить файлы с исходными кодами к проекту предварительно скопировав их в папку проекта.

Рис.11

Выбрать тип файлов: *.*
Можно выбрать и добавить сразу все файлы нажимая Ctrl.
Нажимаем ОК.

Рис.12

сonfig.m4 необязателен. Он нужен для сборки расширения под Unix.

Откомпилировать проект.

Рис.13

Скопировать полученную dll в рабочий каталог интерпретатора с расширениями php.

Рис.14

Исходники

test.php

php_hello.c

php_hello.h

config.w32

1 Comment

  1. Так и не понял, зачем config.w32?
    Она нужна для phpize, а здесь phpize никак не используется..

Leave a Reply to matvey Cancel reply