php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #39130 Compile failure when using VC++ 2005
Submitted: 2006-10-11 18:29 UTC Modified: 2012-09-21 12:40 UTC
Votes:46
Avg. Score:4.5 ± 0.9
Reproduced:39 of 41 (95.1%)
Same Version:15 (38.5%)
Same OS:35 (89.7%)
From: ben dot yan at msn dot com Assigned: pajoye (profile)
Status: Wont fix Package: Compile Failure
PHP Version: 5.2CVS-2007-07-22 OS: Windows
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: ben dot yan at msn dot com
New email:
PHP Version: OS:

 

 [2006-10-11 18:29 UTC] ben dot yan at msn dot com
Description:
------------
Compile with VS.NET 2005

c:\program files\microsoft visual studio 8\vc\include\sys\stat.inl(44) : error C2466: cannot allocate an array of constant size 0
c:\program files\microsoft visual studio 8\vc\include\sys\stat.inl(49) : error C2466: cannot allocate an array of constant size 0
c:\program files\microsoft visual studio 8\vc\include\sys\utime.inl(39) : error C2466: cannot allocate an array of constant size 0
c:\program files\microsoft visual studio 8\vc\include\sys\utime.inl(44) : error C2466: cannot allocate an array of constant size 0
c:\program files\microsoft visual studio 8\vc\include\sys\utime.inl(49) : error C2466: cannot allocate an array of constant size 0
c:\program files\microsoft visual studio 8\vc\include\sys\utime.inl(78) : error C2466: cannot allocate an array of constant size 0


Reproduce code:
---------------
look the zend.h :

...

#include <stdio.h>

/*
 * general definitions
 */

#ifdef ZEND_WIN32
# include "zend_config.w32.h"
# define ZEND_PATHS_SEPARATOR		';'
#elif defined(XXX)
...
#endif


Expected result:
----------------
Look the line 151 at the <../main/config.w32.h>:

/* vs.net 2005 has a 64-bit time_t.  This will likely break
 * 3rdParty libs that were built with older compilers; switch
 * back to 32-bit */
#define _USE_32BIT_TIME_T 1
#define HAVE_STDLIB_H 1


so the config.w32.h should be included first. But it isn't so in the zend.h:

#include <stdio.h>

/*
 * general definitions
 */

#ifdef ZEND_WIN32
# include "zend_config.w32.h"
# define ZEND_PATHS_SEPARATOR		';'
#elif defined(XXX)
...
#endif


This would induce the compile error. and if 

#include <stdio.h>

BEHIND the 

#ifdef ZEND_WIN32
# include "zend_config.w32.h"
# define ZEND_PATHS_SEPARATOR		';'
#elif defined(XXX)
...
#endif

,it will be ok.

Actual result:
--------------
error C2466: cannot allocate an array of constant size 0

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2006-10-12 08:28 UTC] edink@php.net
Wez, you added those lines for VC++ 2005 compability. Could you have a look?
 [2006-10-12 11:19 UTC] wez@php.net
I've seen this before; I think have the fix on a company laptop that is currently occupied and I'll commit it just as soon as I can get access to it again.
 [2006-11-04 15:27 UTC] sailormax at inbox dot lv
I have same error while trying compile my module. With previous PHP all was fine.
With 5.2.0 all fine too, if comment 2 lines at config.w32.h:
#define _USE_32BIT_TIME_T 1
#define HAVE_STDLIB_H 1

used VC++ 2005 Express Edition
 [2007-04-14 04:53 UTC] dmain at themainfamily dot net
This is my output when compiling a simple dll extension using the sample source code in the online documentation.



1>------ Build started: Project: Win32_SystemCalls, Configuration: Release_TS Win32 ------
1>Compiling...
1>Source1.c
1>C:\Program Files\Microsoft Visual Studio 8\VC\include\sys/stat.inl(44) : error C2466: cannot allocate an array of constant size 0
1>C:\Program Files\Microsoft Visual Studio 8\VC\include\sys/stat.inl(49) : error C2466: cannot allocate an array of constant size 0
1>c:\projects\phpextensions\php-5.2.1\tsrm\tsrm_config_common.h(4) : fatal error C1017: invalid integer constant expression
1>Build log was saved at "file://c:\Projects\PhpExtensions\php-5.2.1\ext\Win32_SystemCalls\Release_TS\BuildLog.htm"
1>Win32_SystemCalls - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
 [2007-04-14 05:00 UTC] dmain at themainfamily dot net
If I move this change, then the compiler errors are gone.  I still have another separate issue with compilation though.


This would induce the compile error. and if 

#include <stdio.h>

BEHIND the 

#ifdef ZEND_WIN32
# include "zend_config.w32.h"
# define ZEND_PATHS_SEPARATOR		';'
#elif defined(XXX)
...
#endif

,it will be ok.
 [2007-05-16 04:04 UTC] ben dot yan at msn dot com
I tried PHP5.2.2, but the problem is still there. :(
 [2007-05-19 18:24 UTC] sniper@php.net
Wez, you never got to the company laptop..? Or was it stolen? :D
 [2007-06-02 10:52 UTC] cxd at webpan dot com
Trying to compile a module for PHP 5.2.3 with VC++ 2005 SP1 I also get tons of error like:

error C2466: cannot allocate an array of constant size 0

This module (eAccelerator for Windows) compiled fine with VC++ 2005 SP1 and PHP 5.2.2.

The following might explain the cause of the problem (not sure?) that was (re)introduced with 523( again my module compiles great with PHP 522 & VC++ 2005):

----------------------------------
deprecated "default to int" rule: 

Pre-standard C++ (and all C variants predating C99), use the "default to int" rule when
declarations of functions and variables do not contain an explicit datatype. 
This behavior is maintained in Visual C++ 6.0 as the following declarations show: 


const x=0; //implicit int
static num; // implicit int
myfunc(void *ptr); //implicit return type int

In Visual Studio 2005, you have to specify the datatype explicitly:
const int x=0; static int num; int myfunc(void *ptr); 
--------------------
Hope this helps...
 [2007-06-15 12:47 UTC] grotaiche at hotmail dot com
Yeah, I have the same problem too. I recompile my extension with VS 2005 for every PHP release and I have had the problem for a while. Commenting the #define _USE_32BIT_TIME_T 1 line is not very difficult but it is a by-pass ; a more viable solution would be appreciated :)
Thanks !
 [2007-07-22 06:43 UTC] ben dot yan at msn dot com
hi,
I recompile eAccelerator v0.9.4(http://www.eaccelerator.net/) with the latest PHP(http://snaps.php.net/php5.2-latest.tar.gz), but the same problems are still there.
 [2007-07-22 15:38 UTC] jani@php.net
Wez, can you please check this out, it should be simple fix (for someone who actually has this VC++ thingie)
 [2008-02-12 02:30 UTC] someone at farpost dot com
Version 5.2.5 and VS 2005. Still have this problem.
 [2008-02-12 03:54 UTC] someone at farpost dot com
Fixed this error adding symbol _USE_32BIT_TIME_T to all projects in the Preprocessor Definitions.
 [2008-05-20 01:00 UTC] php-bugs at lists dot php dot net
No feedback was provided for this bug for over a week, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
 [2009-03-03 23:58 UTC] jmckenna at gatewaygeomatics dot com
I have the exact same problem with PHP 5.2.9 and VS 2008.

-jeff
 [2009-03-04 00:11 UTC] pajoye@php.net
We support VC6 only for 5.2.x, it may work with VS2008 (vc9) but there is no guarantee. PHP 5.3 supports 2008 out of the box.
 [2011-10-18 15:39 UTC] josephmdaly at gmail dot com
I just came across this myself with 5.3.8. If you are an extension writer with this issue, try moving php.h to the first include of your source files.
 [2012-09-21 11:11 UTC] gospodin dot p dot zh at gmail dot com
#include <iostream>
//#include "php_test_empty.h"
#include "targetver.h"
#include "php.h"

------------
>c:\program files (x86)\microsoft visual studio 9.0\vc\include\sys\stat.inl(44) 
: error C2466: невозможно выделить память для массива постоянного нулевого 
размера
1>c:\program files (x86)\microsoft visual studio 9.0\vc\include\sys\stat.inl(49) 
: error C2466: невозможно выделить память для массива постоянного нулевого 
размера
1>c:\program files (x86)\microsoft visual studio 
9.0\vc\include\sys\utime.inl(39) : error C2466: невозможно выделить память для 
массива постоянного нулевого размера
1>c:\program files (x86)\microsoft visual studio 
9.0\vc\include\sys\utime.inl(44) : error C2466: невозможно выделить память для 
массива постоянного нулевого размера
1>c:\program files (x86)\microsoft visual studio 
9.0\vc\include\sys\utime.inl(49) : error C2466: невозможно выделить память для 
массива постоянного нулевого размера
1>c:\program files (x86)\microsoft visual studio 
9.0\vc\include\sys\utime.inl(78) : error C2466: невозможно выделить память для 
массива постоянного нулевого размера

----------
means "cannot allocate an array of constant size 0"

DO SOMETHING FINALLY!!!!!!!11111oneone
 [2012-09-21 12:40 UTC] pajoye@php.net
@gospodin dot p dot zh at gmail dot com

5.2 is dead, 5.3+ only supports VC9. So no, nothing is likely to happen, sorry.
 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Sun Nov 24 18:01:32 2024 UTC