Я пытаюсь собрать PHP на Windows вместе с популярной библиотекой C для работы с Excel, LibXL . Эта библиотека имеет собственное расширение на основе объектов PHP, которое называется php_excel . Я пытаюсь собрать последний как общую DLL в Windows, а не статически компилировать его в PHP для распространения.
Моя отправная точка для компиляции - сборка PHP для Windows вики-запись , и я использую 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
Для обеспечения не-поточно-ориентированной сборки библиотеки 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;
}
Я не вижу синтаксических ошибок, но предполагаю, что где-то пропущен очевидный шаг?