V8js-0.1.2(ベータ版)で問題が発生しました-ネット上で他の人が成功しているのを見ていますが、実行しているプラットフォーム/ OSに関係なく、常に同じ問題が発生します。
私は現在、pecl
を介して直接モジュールをビルドしようとしていますが、ソースでphpize
を使用してビルドしようとしています。 V8のインストールが検出され、configure
が成功し、make
がエラーになります。
/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
V8js.ccに#define PHP_V8_VERSION "0.1.2"
を追加すると、次のようになります。
/usr/bin/ld: cannot find -lv8
collect2: ld returned 1 exit status
make: *** [v8js.la] Error 1
これは、提供されたv8 libパスを使用しておらず、代わりにデフォルトのlibパスでlibv8.so
を見つけようとしているため、make
が文句を言っています。所定の位置にシンボリックリンクすると、次のようになります。
/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
libv8.aが新しくコンパイルされたV8から直接のものである場合。誰か考えがありますか?
補遺:このv8
とv8js
にタグを付けたと思いますが、まだ十分な担当者がいません。ごめんなさい! :(
編集:
library=shared
を使用して(sconsを介して)V8を再構築しようとした後、さらに問題が発生します。
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.
最新以外のバージョンのV8を使用する必要がありますか?また、そのままにしておくと(静的、libv8.aを使用)、代わりに静的PHPモジュールを使用できますか?何らかの理由で、configure
を実行します。 v8js-0.1.2ソースでは、共有を無効にして静的を有効にすることはできません。どちらもデフォルトで有効になっており、--disabled-shared
または--enable-shared=no
(デフォルトのyes
値の反対)を渡します。 )共有を有効のままにし、静的を無効にします。
編集2:
コンパイルを3時間以上繰り返した後、問題は、sample=Shell
の使用中にlibrary=shared
を両方とも有効にできないことであるように思われます。これは合理的ではないようで、AFAICTはバグである可能性がありますが、Arch=x64
とlibrary=shared
を使用するとうまくいき、libv8.so
を適切な場所にリンクしてコンパイルすることができました。 v8js PHP拡張子。
ここでの問題は、PHPが実際には共有オブジェクトを見つけることができないように見えることです:
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
libv8.soが/usr/local/v8/libv8.so
にある場合。そのディレクトリを$PATH
に追加したり、libv8.soを拡張ディレクトリにリンクしたりしてみました。何かアイデアはありますか?
通常の場所(/ usrまたは/ usr/localに直接)にV8がインストールされていない場合、configureスクリプトはV8のバージョンを判別するのに苦労する可能性があります。使用したもの:export CXXFLAGS = "-I/usr/local/mydir/include -Wl、-rpath、/ usr/local/mydir/lib"前にconfigureスクリプトを実行します(--with-v8js =/usr/local/mydir)v8バージョンを見つけることができるようにします。
実際、v8jsのバグは、V8バージョンが見つからないときにconfigureスクリプトが1を終了しないことです。
Libv8.so(共有ライブラリ、.aは通常共有ライブラリではありません)が必要です。ldがそれを見つける場所(/ usr/lib /、/ usr/local/lib /、または/ etc/ldで指定された任意のパス)にあります。 so.conf(必要なディレクトリをそこに追加できます)