I've been working on this sort of thing for the past few weeks as I've been 
trying to make sure all of the PHP extensions I've written work on UNIX 
systems as well as Windows systems.

I think you can compile using gcc and cygwin, but I believe the recommended 
way is with Visual C++ 6, as the official binaries are done with VC++. (I 
think, I don't use PHP in Windows except to test portability.)

Anyways, here's what I do as far as settings. This is for a thread-safe 
release extension. I'm assuming you have a bit of experience working with 
VC++ and the PHP source, and that you're able to compile PHP in the first 
place.

0. Start a new project in VC++ and add your extension's files. 

1. In the Configurations dialog, add two configurations: Release_TS and 
Debug_TS. Release_TS should copy the settings from Release and Debug_TS 
should obviously copy from Debug. You can Remove Release and Debug and 
close the dialog. The next set of steps is for the Release_TS 
configuration. If you can figure that out, you should be able to get 
Debug_TS working fine.

2. Open up Project->Settings. On the C/C++ tab, General Category, added the 
following preprocessor definitions: ZEND_DEBUG=0, 
COMPILE_DL_YOUR_EXTENSION_NAME, ZTS=1, ZEND_WIN32, PHP_WIN32. 
YOUR_EXTENSION_NAME is the name you'll find in the sources generated by 
ext_skel.

3. In the Code Generation Category, change Use run-time Library to 
"Multithreaded DLL". 

4. In the Preprocessor Category, add the following "Additional include 
directories": ..\.., ..\..\main, ..\..\Zend, ..\..\TSRM, ..\..\bindlib_w32. 

5. On the Link tab in the General Category, change the Output file name to
..\..\Release_TS/php_yourextension.dll.

6. On that same tab, same category, add php4ts.lib to Object/library 
modules. 

7. In the Input Category, add the following to Additional library path: 
..\..\Release_TS.

That should be it. Close dialog and set the active configuration to 
Release_TS and (hopefully) build the DLL.

If you're using other libraries and such, make sure you compile them using 
the multithreaded DLL runtime library like you did with your extension. I 
found that out the hard way trying to get my cryptopp extension working on 
Windows.

Check out some of the VC++ project files included with the PHP source when 
you're stuck and try to replicate the settings they use in your own 
project. It takes a while to get used to building extensions with VC++ 
'cause that sort of thing is so poorly documented in the Windows world, but 
once you get it once you should be fine.

J


Igal Raizman wrote:

> Hello,
> 
> Can someone point me in the directions of a tutorial or perhaps some info
> on making PHP extensions on a Windows system ?
> 
> not on how to code them, but rather on how to compile them on a windows
> system.
> 
> Thanks,


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to