我試圖在Windows上一起構建PHP以及用於Excel操作的流行C庫LibXL。這個庫有一個原生的基於PHP對象的擴展名爲php_excel。我試圖將後者構建爲Windows上的共享DLL,而不是將其靜態編譯爲PHP進行分發。在Windows上編譯php_excel和LibXL
我的編譯起點是Windows的wiki entry的PHP buidling,我使用Visual Studio 2008和Windows SDK 6.1作爲推薦。爲了進一步說明,我的參考目錄是c:\php-sdk\php53dev\vc9\x86\
。對PHP快照的引用顯示爲文件夾php5.3-x
,其中x是快照構建日期時間。
PHP的快照提取後,我在deps
加入bin\libxl.dll
,include_c\*
和lib\libxl.lib
到相應的文件夾。
然後我將php_excel擴展名解壓到php5.3-x\ext\excel-0.9.1
。
運行buildconf
和configure --help
表明正在看到擴展。我然後運行:
configure --disable-all --enable-cli --with-excel=shared --disable-zts --disable-isapi --disable-nsapi
nmake
爲了實現DLL的VC9非線程安全的版本。
在nmake
,我來補防的語法錯誤在LibXL每頭文件:
c:\php-sdk\php53dev\vc9\x86\deps\include\enum.h(4) : error C2061: syntax error: identifier 'libxl'
c:\php-sdk\php53dev\vc9\x86\deps\include\enum.h(4) : error C2059: syntax error: ';'
...
和語法錯誤在excel.c源php_excel:
ext\excel-0.9.1\excel.c(33) : error C2146: syntax error : missing ')' before identifier 'f'
ext\excel-0.9.1\excel.c(33) : error C2061: syntax error : identifier 'f'
ext\excel-0.9.1\excel.c(33) : error C2059: syntax error : ';'
ext\excel-0.9.1\excel.c(33) : error C2059: syntax error : ')'
...
這裏,例如,來自相應文件的這兩個部分:
enum.h
#ifndef ENUM_CPP_H
#define ENUM_CPP_H
namespace libxl { # line 4
...
}
excel.c
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include "libxl.h"
#include <stdlib.h>
#include "php.h"
#include "php_ini.h"
#include "ext/standard/info.h"
#include "ext/date/php_date.h"
#include "php_excel.h"
#include "zend_exceptions.h"
static long xlFormatBorder(FormatHandle f) # line 33
{
return 1;
}
我沒有看到syn稅收錯誤,但假設我錯過了某個明顯的步驟?
非常感謝皮埃爾 - 任何提示我在編譯錯誤的地方?我仍然希望在本地進行編譯,即使使用php_excel的版本,包括[您的更改提交](https://github.com/iliaal/php_excel/commit/4aa7a522b8c52d2956a8765f219bdfa3a9ba8ef4)和新的從今天早上開始的PHP 5.3快照。 這是針對TS和NTS構建的。 – 2011-05-16 11:46:26
再次感謝皮埃爾,這現在編譯我[你的最新提交](https://github.com/pierrejoye/php_excel/commit/2e4ceedb792d849475310f45e0f6efc6efff431f) – 2011-05-16 15:55:25