web-dev-qa-db-ja.com

V8js PHPモジュール-libv8.soが見つかりません

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から直接のものである場合。誰か考えがありますか?

補遺:このv8v8jsにタグを付けたと思いますが、まだ十分な担当者がいません。ごめんなさい! :(

編集:

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=x64library=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を拡張ディレクトリにリンクしたりしてみました。何かアイデアはありますか?

5
mway

通常の場所(/ 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を終了しないことです。

2
jdi

Libv8.so(共有ライブラリ、.aは通常共有ライブラリではありません)が必要です。ldがそれを見つける場所(/ usr/lib /、/ usr/local/lib /、または/ etc/ldで指定された任意のパス)にあります。 so.conf(必要なディレクトリをそこに追加できます)

0
rvs