Frage V8js PHP-Modul unter Linux - kann libv8.so nicht finden


Ich habe ein Problem mit v8js-0.1.2 (beta) - Ich sehe, dass andere im Netz Erfolg haben, aber unabhängig davon, welche Plattform / Betriebssystem ich betreibe, habe ich immer das gleiche Problem.

Ich versuche gerade das Modul zu bauen, beides direkt über peclund Gebäude nach dem Gebrauch phpize auf der Quelle. Es findet den V8 installieren, configure ist erfolgreich und dann make Fehler aus:

/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

Wenn ich hinzufüge #define PHP_V8_VERSION "0.1.2" In v8js.cc bekomme ich dann:

/usr/bin/ld: cannot find -lv8
collect2: ld returned 1 exit status
make: *** [v8js.la] Error 1

welches ist make beschweren, weil es nicht den zur Verfügung gestellten v8 lib Pfad benutzt und stattdessen versucht es zu finden libv8.so im Standard-lib-Pfad. Wenn ich es an Ort und Stelle verlinke, bekomme ich:

/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

wenn libv8.a direkt aus dem neu kompilierten V8 stammt. Hat jemand irgendwelche Gedanken?

Nachtrag: Ich hätte dies markiert v8 und v8js aber ich habe noch nicht genug rep. Es tut uns leid! :(

Bearbeiten:

Nach dem Versuch, V8 (über Scons) mit neu zu erstellen library=shared, Ich habe mehr Probleme:

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.

Sollte ich eine andere Version als V8 verwenden? Wenn ich es unverändert lasse (statisch mit libv8.a), ist es dann möglich, stattdessen ein statisches PHP-Modul zu verwenden? Aus welchem ​​Grund auch immer configure auf der Quelle v8js-0.1.2 erlaubt es mir NICHT, shared und enable static zu deaktivieren; Sie sind beide standardmäßig aktiviert und übergeben --disabled-shared oder --enable-shared=no (Gegenteil von Standard yes value) lässt shared aktiviert und deaktiviert static.

Bearbeiten 2:

Nach einer soliden 3 + Stunden wiederholten Kompilierung scheint das Problem zu sein, dass Sie beide nicht aktivieren können sample=shell während dem Benutzen library=shared. Dies scheint nicht vernünftig und AFAICT ist wahrscheinlich ein Fehler, jedoch mit arch=x64 und library=shared arbeitete für mich, und dann konnte ich verlinken libv8.so an den richtigen Ort und kompilieren Sie die PHP-Erweiterung v8js.

Das Problem ist nun, dass PHP scheinbar nicht in der Lage ist, das gemeinsame Objekt zu finden:

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

wenn libv8.so bei liegt /usr/local/v8/libv8.so. Ich habe versucht, dieses Verzeichnis anzuhängen $PATH, libv8.so mit dem Erweiterungsverzeichnis verknüpfen, etc. Irgendwelche Ideen?


5
2018-03-27 08:03


Ursprung




Antworten:


configure script kann es schwer haben, die V8-Version zu bestimmen, wenn V8 nicht am üblichen Ort installiert ist (direkt in / usr oder / usr / local). Ich benutzte:   export CXXFLAGS = "- I / usr / lokal / mydir / include -Wl, - rpath, / usr / local / mydir / lib" bevor Sie das configure-Skript ausführen (--with-v8js = / usr / local / mydir), damit es die v8-Version finden kann.

Es ist wirklich ein Fehler in v8js, dass das configure-Skript 1 nicht beendet, wenn es die V8-Version nicht finden kann.


2
2018-04-23 23:54





Sie brauchen libv8.so (shared library, .a ist normalerweise keine shared lib) irgendwo wo ld es finden würde - in / usr / lib /, / usr / local / lib / oder in einem beliebigen Pfad, der in / etc / ld angegeben ist. so.conf (Du könntest dort ein beliebiges Verzeichnis hinzufügen)


0
2018-03-27 08:13



Umbau von V8 mit library=shared (während ich es gebaut habe) ... Ich werde dich wissen lassen, wie es läuft. Vielen Dank! - mway
Die Frage mit mehr Fehlern beim Neuerstellen von V8 mit library = shared wurde aktualisiert. :( - mway
Hmm, der übliche Grund für den Fehler "Keine solche Datei" ist, dass es keine solche Datei gibt. Es ist sehr einfach, Fehler im Pfad zu machen. Haben Sie versucht, den Pfad zu kopieren und einzufügen und v8js.so nach /usr/local/php-5.3.6/lib/php/extensions/no-debug-non-zts-20090626/ zu kopieren? - rvs
Ein anderer Vorschlag: v8js.so kann seine Abhängigkeiten nicht finden. Lauf ldd /path/to/v8js.so und prüfen Sie, ob Dateien fehlen. Möglicherweise müssen Sie / usr / local / v8 / und / oder einige andere Verzeichnisse zu /etc/ld.so.conf hinzufügen, damit das System libs dort finden kann. - rvs