Correndo em um problema com o v8js-0.1.2 (beta) - Estou vendo outros terem sucesso na rede, mas independentemente de qual plataforma / SO eu estou rodando, eu sempre enfrento o mesmo problema.
No momento, estou tentando criar o módulo, diretamente por meio de pecl
, e criando depois de usar phpize
na origem. Ele encontra a instalação do V8, configure
é bem-sucedida e, em seguida, make
erros:
/usr/local/src/v8js-0.1.2/v8js.cc: In function 'int zm_startup_v8js(int, int)':
/usr/local/src/v8js-0.1.2/v8js.cc:1135: error: 'PHP_V8_VERSION' was not declared in this scope
/usr/local/src/v8js-0.1.2/v8js.cc: In function 'void zm_info_v8js(zend_module_entry*)':
/usr/local/src/v8js-0.1.2/v8js.cc:1231: error: 'PHP_V8_VERSION' was not declared in this scope
make: *** [v8js.lo] Error 1
Se eu adicionar #define PHP_V8_VERSION "0.1.2"
no v8js.cc, eu obtenho:
/usr/bin/ld: cannot find -lv8
collect2: ld returned 1 exit status
make: *** [v8js.la] Error 1
que é make
de reclamação porque não está usando o caminho lib da v8 fornecido e está tentando encontrar libv8.so
no caminho padrão da biblioteca. Se eu ligar symlink no lugar, eu recebo:
/usr/bin/ld: skipping incompatible /usr/local/lib/libv8.a when searching for -lv8
/usr/bin/ld: cannot find -lv8
collect2: ld returned 1 exit status
make: *** [v8js.la] Error 1
quando libv8.a é diretamente do V8 recém-compilado. Alguém tem algum pensamento?
Adendo: eu teria marcado esse v8
e v8js
, mas ainda não tenho representação suficiente. Desculpa! : (
Editar:
Depois de tentar reconstruir o V8 (via scons) com library=shared
, tenho mais problemas:
obj/sample/shell/release/shell.o: In function 'RunMain(int, char**)':
shell.cc:(.text+0xf14): undefined reference to 'v8::internal::Thread::Join()'
shell.cc:(.text+0xff4): undefined reference to 'v8::internal::Thread::Thread(v8::internal::Isolate*, v8::internal::Thread::Options const&)'
shell.cc:(.text+0x1008): undefined reference to 'v8::internal::Thread::Start()'
shell.cc:(.text+0x10a3): undefined reference to 'v8::internal::OS::CreateSemaphore(int)'
shell.cc:(.text+0x10b2): undefined reference to 'v8::internal::OS::CreateSemaphore(int)'
obj/sample/shell/release/shell.o: In function 'SourceGroup::IsolateThread::~IsolateThread()':
shell.cc:(.text._ZN11SourceGroup13IsolateThreadD0Ev[SourceGroup::IsolateThread::~IsolateThread()]+0x14): undefined reference to 'v8::internal::Thread::~Thread()'
obj/sample/shell/release/shell.o: In function 'SourceGroup::IsolateThread::~IsolateThread()':
shell.cc:(.text._ZN11SourceGroup13IsolateThreadD1Ev[SourceGroup::IsolateThread::~IsolateThread()]+0xe): undefined reference to 'v8::internal::Thread::~Thread()'
collect2: ld returned 1 exit status
scons: *** [shell] Error 1
scons: building terminated because of errors.
Devo estar usando uma versão do V8 diferente da mais recente? Além disso, se eu deixar como está (estático, usando libv8.a), é possível usar um módulo PHP estático? Por alguma razão, executar configure
na fonte v8js-0.1.2 NÃO me permite desabilitar o compartilhamento e habilitar estático; ambos estão habilitados por padrão, e passar --disabled-shared
ou --enable-shared=no
(oposto ao valor padrão yes
) deixa o compartilhamento ativado e desativa a estática.
Editar 2:
Após 3 + horas de compilação repetida, o problema parece ser que você não pode habilitar sample=shell
enquanto usa library=shared
. Isso não parece razoável e o AFAICT é provavelmente um bug, no entanto, usando arch=x64
e library=shared
funcionou para mim, e então eu consegui vincular libv8.so
ao local correto e compilar a extensão PHP v8js.
O problema agora é que o PHP parece não conseguir encontrar o objeto compartilhado:
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/php-5.3.6/lib/php/extensions/no-debug-non-zts-20090626/v8js.so' - libv8.so: cannot open shared object file: No such file or directory in Unknown on line 0
quando libv8.so reside em /usr/local/v8/libv8.so
. Eu tentei anexar esse diretório a $PATH
, vinculando libv8.so ao diretório de extensão, etc. Alguma idéia?