【发布时间】:2011-05-15 11:38:45
【问题描述】:
我正在尝试在 Windows 上构建 PHP 以及用于 Excel 操作的流行 C 库LibXL。这个库有一个原生的基于 PHP 对象的扩展名为php_excel。我正在尝试将后者构建为 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;
}
我没有看到语法错误,但假设我在某处遗漏了一个明显的步骤?
【问题讨论】:
标签: php windows compilation