#45698 [Fbk->Opn]: Doesn't compile with VC6 - Include problem
| From: | Keisial at gmail dot com | Date: | Sat, 23 Aug 2008 13:40:21 +0000 |
| Subject: | #45698 [Fbk->Opn]: Doesn't compile with VC6 - Include problem | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-128342@lists.php.net to get a copy of this message | ||
ID: 45698
User updated by: Keisial at gmail dot com
Reported By: Keisial at gmail dot com
-Status: Feedback
+Status: Open
Bug Type: Compile Failure
Operating System: Windows - VC6
PHP Version: 5.3CVS-2008-08-03 (snap)
Assigned To: pajoye
New Comment:
Thanks for your attention.
I had solved it by doing: set INCLUDE=C:\PROGRA~1\Microsoft Platform
SDK\Include;%INCLUDE%
Just doing configure.bat "--with-extra-includes=C:\PROGRA~1\Microsoft
Platform SDK\Include" "--with-extra-libs=C:\PROGRA~1\Microsoft Platf
orm SDK\lib" as you mention doesn't work, you still need the VC
includes, or you get "fatal error C1083: Cannot open include file:
'stdio.h': No such file or directory"
Some includes only have the platform sdk (windows.h, winsock2.h...) but
don't provide standard headers. The newest use a deprecated attribute
which is not recognised, mingw32 headers fail for gcc specific code...
Here are the different results i got when looking for a working
combination:
C:\PROGRA~1\Microsoft Visual Studio 9.0\VC\include\crtdefs.h(548) :
error C2485:
'deprecated' : unrecognized extended attribute
C:\PROGRA~1\Microsoft Visual Studio 8\VC\include\crtdefs.h(556) : error
C2485: '
deprecated' : unrecognized extended attribute
Zend\zend.h(37) : fatal error C1083: Cannot open include file:
'stdio.h': No suc
C:\PROGRA~1\Microsoft SDKs\Windows\v6.1\Include
No stdio.h
C:\PROGRA~1\Microsoft SDKs\Windows\v6.1\Include + VC6
C:\PROGRA~1\Microsoft SDKs\Windows\v6.1\Include\specstrings.h(9) :
fatal error C
1083: Cannot open include file: 'sal.h': No such file or directory
C:\PROGRA~1\Microsoft Platform SDK\Include
No stdio
C:\PROGRA~1\Microsoft Platform SDK\Include + VC
Works
Mingw32 headers -> Fail for GCCisms
w32api headers + VC6
include\stdio.h(217) : error C2054: expected '(' to follow '
__inline__'
Previous Comments:
------------------------------------------------------------------------
[2008-08-23 09:49:02] pajoye@php.net
I finally got some more time to investigate. Can you try the
following:
- open a normal console
- "c:\program files\Microsoft Visual Studio\VC98\bin\vcvars32.bat"
- Do not register the SDK or VS vars, type "export<enter>" to be sure
that no LIB or INCLUDE are defined (may be set to VC98 include or lib)
Then run:
configure.bat --with-extra-includes=c:\path\to\sdk200302\include
--with-extra-libs=c:\path\to\sdk200302\lib
and finally nmake.
It may fix the problem as the correct winsock2 will be included.
The important thing to remember is that winsock2.h is a special case,
it has to be included before windows.h (msdn or google about it).
------------------------------------------------------------------------
[2008-08-03 13:35:50] pajoye@php.net
Err no.
Please do not commit this patch as it does break VC6 builds now.
Please use the following compilers SDK pairs:
http://wiki.php.net/internals/windows/compiler
http://wiki.php.net/internals/windows/windowssdk
This is what we use for http://snaps.php.net
------------------------------------------------------------------------
[2008-08-03 13:25:31] pajoye@php.net
Stas, can you commit the patch please?
------------------------------------------------------------------------
[2008-08-03 12:27:13] derick@php.net
This will probably fix the compile failure that Steph and I were
getting...
------------------------------------------------------------------------
[2008-08-03 12:23:45] Keisial at gmail dot com
Description:
------------
5.3 doesn't compile with VC6. When including winsock2.h at
zend_config.w32.h it includes windows.h which in turn includes winsock
stuff before a SOCKET is defined. Compilation fails with error on
mswsock.h
(This doesn't happen including only those two headers, so some defines
are modifying the defualt behaviour)
Changing the order to include windows.h before winsock2.h fixes it:
--- zend_config.w32.h 2008-07-17 20:33:46.000000000 +0200
+++ zend_config.w32.h 2008-08-03 14:19:56.593750000 +0200
@@ -35,8 +35,8 @@
#ifndef ZEND_INCLUDE_FULL_WINDOWS_HEADERS
#define WIN32_LEAN_AND_MEAN
#endif
-#include <winsock2.h>
#include <windows.h>
+#include <winsock2.h>
#include <float.h>
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=45698&edit=1