我正在尝试在Windows上构建PHP以及用于Excel操作的流行C库LibXL。该库具有一个名为php_excel的本机PHP基于对象的扩展。我正在尝试将后者构建为Windows上的共享DLL,而不是将其静态编译为PHP以进行分发。
我的编译起点是Windows wiki entry的PHP建模,我推荐使用Visual Studio 2008和Windows SDK 6.1。出于本说明中的其他路径的目的,我的参考目录为c:\php-sdk\php53dev\vc9\x86\
。对PHP快照的引用显示为文件夹php5.3-x
,其中x是快照构建日期时间。
在提取PHP快照后,我将bin\libxl.dll
,include_c\*
和lib\libxl.lib
添加到deps
中的相应文件夹中。
然后我将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: ';'
...
和php_excel的excel.c源代码中的语法错误:
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;
}
我没有看到语法错误但是假设我在某个地方错过了一个明显的步骤?