Saturday, January 23, 2010

顺手把新版本的 eAccelerator 编译了

上次编译大概是两周前吧,写makefile成功后的第二次编译,但是当时svn拿到的代码 php5.3.1 下编译有错,具体记不得了。
刚才svn update了下,改动不少。
重新export一份到 php-5.3.1\ext\eAccelerator 下,makefile.txt 依旧在 win32下。
Visual Studio 2008 Command Prompt 进到目录,直接 nmake -f makefile.txt 轻松成功。把当前目录生成的dll copy到 php53\ext 下,php -v php -m 都成功了。
顺手把 php 5.2 的源码目录和二进制目录都更新了。5.2.12。把eAccelerator 的目录也copy到了相应目录下。

5.3 和 5.2 的扩展编译的第一个区别是 buildconf + configure.

5.3 下上次编译的时候,直接解压的源码包,进到ext目录,nmake -f makefile.txt 貌似报错是 config.h 不存在还是什么的。回到 php 源码根目录,buildconf.bat && cscript configure.js 再去编译就好了。
当然需要把那个 php5ts.lib copy到 eAccelerator的目录里。

5.2 这次编译,我第一下也去 buildconf + configure 了,结果发现还需要把win32build 那个环境搭起来。印象中以前编译那些乱七八糟的扩展基本都没这么折腾。直接尝试去 nmake,一切顺利。不提示缺那个文件。
PS: VS2008下提示
        cl.exe /nologo ../optimize.c /Fo"optimize.o" /O1 /c /I ../../../ /I ../../../Zend /I ../../../TSRM /I ../../../main /I ../../ /D NDEBUG /D ZEND_DEBUG=0 /D WIN32 /D _WINDOWS /D _USRDLL /D HAVE_EACCELERATOR /D COMPILE_DL_EACCELERATOR /D ZEND_WIN32 /D PHP_WIN32 /D ZTS=1 /D HAVE_EXT_SESSION_PHP_
SESSION_H=1 /D WITH_EACCELERATOR_CRASH_DETECTION /D WITH_EACCELERATOR_OPTIMIZER /D WITH_EACCELERATOR_SESSIONS /D WITH_EACCELERATOR_CONTENT_CACHING /D WITH_EACCELERATOR_SHM /D WITH_EACCELERATOR_INFO
optimize.c
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\sys/stat.inl(44) : error C2466: cannot allocate an array of constant size 0
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\sys/stat.inl(49) : error C2466: cannot allocate an array of constant size 0
g:\build\phpbuild\vc9\x86\php-5.2.12\tsrm\readdir.h(10) : warning C4005: '_WIN32_WINNT' : macro redefinition
C:\Program Files\Microsoft SDKs\Windows\v6.1\include\sdkddkver.h(186) : see previous definition of '_WIN32_WINNT'
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\sys/utime.inl(39) : error C2466: cannot allocate an array of constant size 0
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\sys/utime.inl(44) : error C2466: cannot allocate an array of constant size 0
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\sys/utime.inl(49) : error C2466: cannot allocate an array of constant size 0
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\sys/utime.inl(78) : error C2466: cannot allocate an array of constant size 0
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\wtime.inl(37) : warning C4133: 'function' : incompatible types - from 'const time_t *' to 'const __time32_t *'
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\wtime.inl(43) : warning C4133: 'function' : incompatible types - from 'const time_t *' to 'const __time32_t *'
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\time.inl(38) : warning C4133: 'function' : incompatible types - from 'const time_t *' to 'const __time32_t *'
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\time.inl(44) : warning C4133: 'function' : incompatible types - from 'const time_t *' to 'const __time32_t *'
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\time.inl(51) : warning C4133: 'function' : incompatible types - from 'const time_t *' to 'const __time32_t *'
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\time.inl(57) : warning C4133: 'function' : incompatible types - from 'const time_t *' to 'const __time32_t *'
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\time.inl(64) : warning C4133: 'function' : incompatible types - from 'const time_t *' to 'const __time32_t *'
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\time.inl(69) : warning C4133: 'function' : incompatible types - from 'const time_t *' to 'const __time32_t *'
F:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE\time.inl(81) : warning C4133: 'function' : incompatible types - from 'time_t *' to '__time32_t *'
NMAKE : fatal error U1077: '"F:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\cl.exe"' : return code '0x2'


直接进到 源码的
\main\config.w32.h
注释掉
#define _USE_32BIT_TIME_T 1




不过,php 5.2 编译的时候,需要单独编译 eAccelerator 目录的 fnmatch.c 否则找不到符号
cl.exe /nologo php5ts.lib odbc32.lib odbccp32.lib /link /out:"eAccelerator.dll" optimize.o opcodes.o mm.o eaccelerator.o ea_store.o ea_dasm.o debug.o ea_info.o ea_restore.o /dll
Creating library eAccelerator.lib and object eAccelerator.exp
eaccelerator.o : error LNK2019: unresolved external symbol _fnmatch referenced in function _ea_match
eAccelerator.dll : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: '"F:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\cl.exe"' : return code '0x2'
Stop.
php 5.3.1 的 fnmatch 直接在 php的源码包 \win32 下有了。

No comments:

Post a Comment