Как мне скомпилировать расширение PHP с Microsoft Visual C ++ 2008? - PullRequest
8 голосов
/ 05 февраля 2011

Я создал DLL расширения PHP Hello World с Microsoft Visual C ++ 2008. У меня есть право php.ini (я знаю, потому что, когда я включаю и отключаю расширение gd2, является эффектом),но когда я загружаю расширение, оно не появляется в дополнительных модулях в phpinfo().

Когда я пытаюсь проверить функцию (простую функцию double()), она, очевидно, не работает.Я использовал этот урок ).

Если бы кто-то мог предоставить свои dll, созданные при этом (чтобы посмотреть, не испортился ли мой или это мой сервер), я бы с удовольствием протестировал его.

Спецификации системы

ОС: Windows (Vista)
Сервер: WAMP
PHP: 5.3.5 (Xampp и IIS также установлены)

Когда я запускаю команду php --ini, я получаю эту ошибку:

PHP Startup: TalkPHP Extension: Unable to initalize module
Module compiled with build ID=API20090626, TS, VC9.
PHP   compiled with build IF=API20090626, TS, VC6.
These options need to match

Значит ли это, что мне нужно использовать версию 9 для компиляции PHP?

Ответы [ 3 ]

2 голосов
/ 07 февраля 2011

VC9 и VC6 сборки не совместимы. Вы должны либо скомпилировать свою DLL с помощью VC6, либо получить исполняемые файлы PHP, скомпилированные с помощью VC9, со страницы .

.

Если вы используете Apache и mod_php, вам также понадобится сборка Apache VC9 для загрузки PHP VC9, вы можете получить их на apachehaus.com .

1 голос
/ 08 февраля 2011

Решение из комментариев ...

-Я нашел решение forums.zend.com / viewtopic.php? F = 55 & t = 2045

-Возможноduplicate: question: stackoverflow.com / questions / 3641751 /

Я получаю эти предупреждения

c:\wamp\bin\php\php-5.3.5src\zend\zend_build.h(19) : warning C4005: 'PHP_COMPILER_ID': macro redefinition c:\wamp\bin\php\php-5.3.5src\main\config.w32.h(189) : see previous definition of 'PHP_COMPILER_ID' 1>
c:\wamp\bin\php\php-5.3.5src\main\config.w32.h(189) : warning C4005: 'PHP_COMPILER_ID' : macro redefinition 1> 
c:\wamp\bin\php\php-5.3.5src\zend\zend_build.h(19) : see previous definition of'PHP_COMPILER_ID'

Я думаю, что это связано с тем, что мой на самом деле говоритскомпилировано с VC9 и по остальным ничего не имеет.(Это предупреждения, но я думаю, что именно поэтому это не работает)

Хорошо, ничего больше не делал, просто попробовал, но когда я запустил расширение, оно заработало.Я все еще получал ошибки от php --ini, но он работал и работал.

0 голосов
/ 16 февраля 2011

Я скомпилировал и успешно запустил пользовательское расширение php.

Можете ли вы попробовать следующее:

  • получить сборку vc9 из php-5.3.5
  • не #define PHP_COMPILER_ID в заголовочном файле zend_build.h (в любом случае, ИМХО, это плохая идея)
  • вы, вероятно, также определили PHP_COMPILER_ID в config.w32.h;удалите его
  • в настройках вашего проекта (C / C ++ - Препроцессор), определите: PHP_COMPILER_ID = \ "VC9 \" (если вам нужна сборка vc6 из php, я бы попытался определить PHP_COMPILER_ID = \ "VC6 \"; Я не знаю, работает ли это без проблем, но я использовал созвездие [php-5.2.x vc6, пользовательское расширение php, скомпилированное с vc9] без проблем, когда-либо)
...