Компиляция собственного расширения PHP для Windows с помощью Visual Studio 2008 - PullRequest
3 голосов
/ 24 июня 2009

Я написал расширение PHP, и оно может быть скомпилировано и успешно запущено в Linux. Но на окнах я столкнулся с некоторыми проблемами.

Я выполнил компиляцию в Windows согласно http://blog.slickedit.com/?p=128 с исходным кодом PHP версии 5.2.10, и после компиляции он сгенерировал файл dll. Но когда я попытался использовать файл dll, он сообщил мне о проблемах с памятью при запуске Apache (Wamp-сервер). А потом я начал процесс отладки, и казалось, что у REGISTER_INI_ENTRIES () были проблемы.

Вот исходный код расширения PHP, http://www.bluefly.cn/xsplit.tar.gz, и он отлично работает в Linux. Но я также хочу, чтобы он работал на Windows.

Извините, я не профессионал, поэтому я надеюсь, что кто-то может мне помочь.

Любая помощь приветствуется и заранее спасибо ~

Ответы [ 2 ]

2 голосов
/ 12 декабря 2009

Причина, по которой вы не видите проблемы в Linux, заключается в том, что вы делаете безопасную сборку потоков в Windows, но не в Linux. Попробуйте добавить --enable-maintainer-zts в Linux, а затем проверьте с помощью valgrind (USE_ZEND_ALLOC=0 valgrind /usr/bin/php script.php)

С первого взгляда на ваш код я увидел, что вы не определили свой php_xsplit_init_globals, который инициализировал переменные потока. Эта функция должна быть зарегистрирована с MINIT путем добавления

ZEND_INIT_MODULE_GLOBALS(xsplit, php_yplist_init_globals, NULL);

вызов. Может быть, что-то не так, но это первое, что я увидел.

2 голосов
/ 08 декабря 2009

Wamp скомпилирован с использованием VC6 и требует, чтобы ваш модуль был скомпилирован с VC6.

Сообщение Ромену Бурдону (автору WampServer) слова: Поскольку Apache скомпилирован с VC6, если вы хотите запустить PHP как модуль (как в WampServer), вы должны скомпилировать модуль с VC6.

Если вы хотите скомпилировать свой модуль с более новой платформой, вы должны скомпилировать весь дистрибутив PHP-CGI и запустить его как (быстрый) CGI.

Если вы умеете читать по-французски (или знаете, как пользоваться переводчиком), вы можете прочитать этот пост .

...