Node.js von yum auf Fedora kann nicht mit dem V8-Symbolfehler beginnen

3766
John Zwinck

Ich habe das nodejs-Paket auf Fedora 16 folgendermaßen installiert:

# yum install nodejs 

Es stürzte jedoch beim Start ab, wenn es ohne Argumente ausgeführt wurde:

$ nodejs nodejs: ../src/handle_wrap.cc:65: static v8::Handle<v8::Value>  node::HandleWrap::Unref(const v8::Arguments&): Assertion  `args.Holder()->InternalFieldCount() > 0' failed. Aborted (core dumped) 

Und auch mit einer leeren Datei:

$ nodejs /dev/null nodejs: symbol lookup error: nodejs: undefined symbol:  _ZN2v82V837AdjustAmountOfExternalAllocatedMemoryEi 

Wie kann ich Node.js mit yum auf Fedora installieren und beim Start nicht abstürzen lassen?

3

5 Antworten auf die Frage

3
Tiddo

Beide Antworten gegeben sind nicht vollständig Lösungen: so schnell wie Sie ausführen yum updateoder yum upgradev8 wird wieder aufgerüstet werden. Die vollständige Lösung ist wie folgt:

Entfernen Sie zuerst v8 und fügen Sie das nodejs-stable-Repository zu yum hinzu, genau wie ftrotter gesagt hat:

$ sudo yum -y remove v8 $ sudo yum localinstall --nogpgcheck http://nodejs.tchol.org/repocfg/fedora/nodejs-stable-release.noarch.rpm 

Jetzt sollten Sie herausfinden, welche Repos Version 8 bieten:

$ yum info v8 

Auf meinem System gab es 2 Repos, die v8 bereitstellten: updatesund nodejs-stable. Wir wollen nur v8 von nodejs-stable, also sollten wir v8 von allen anderen Repos ausschließen. Wir können ein Paket mit den Repo-Konfigurationsdateien ausschließen. Diese Dateien können in gefunden werden /etc/yum.repos.d/. Die Konfigurationsdatei für das updatesRepo lautet fedora-updates.repo. Öffnen Sie diese Datei und fügen Sie exclude=v8*sie dem [updates]Abschnitt dieser Datei hinzu. Schließlich können Sie v8, node und npm erneut installieren:

$ sudo yum install npm 

V8 wird nicht mehr aus dem updatesRepository heruntergeladen, sondern nur aus dem nodejs-stableRepository. Daher lädt yum immer die richtige v8-Version für den Knoten herunter.

3
jdrefahl

Wenn Sie den oben genannten Fehler erhalten, halten Sie an und führen Sie folgende Schritte aus:

$ sudo yum -y remove v8 $ sudo yum localinstall --nogpgcheck http://nodejs.tchol.org/repocfg/fedora/nodejs-stable-release.noarch.rpm # You probably already have this repo installed, may be skipped.  # Next line will reinstall older version of V8 and working NPM - $ sudo yum --disablerepo=* --enablerepo=nodejs-stable install nodejs-compat-symlinks npm 
Diese Antwort scheint die gleiche zu sein, die ftrotter vor einiger Zeit gepostet hat. John Zwinck vor 12 Jahren 0
2
Tim Bunce

Ich bin gerade auf einem System auf dieses Problem gestoßen, während ein anderes System, das identisch sein sollte, das Problem nicht hatte.

Bei der Untersuchung fiel mir das auf yum resolvedep v8 die 1:v8-3.13.7.5-1.el6.x86_64auf beiden Systemen, aber yum info v8nicht zeigen v8 als auf dem System installiert, das funktioniert.

Auf eine Ahnung lief ich yum remove v8auf dem kaputten System, das entfernt wurde1:v8-3.13.7.5-1.el6.x86_64 und nodejs-0.6.18-1.el6.x86_64 .

Dann habe ich yum install nodejsdie installiert nur nodejs-0.6.18-1.el6.x86_64, und jetzt das NodeJS funktioniert gut.

Dies funktionierte für mich auf einer Amazon EC2 CentOS-Instanz. brendan vor 11 Jahren 0
0
John Zwinck

Der zweite Fehler ist ein anständiger Hinweis, dass das Problem kein Codefehler in Node.js ist, sondern ein binäres Inkompatibilitätsproblem zwischen C ++ - Komponenten. Dieses Symbol in C ++ ist v8::V8::AdjustAmountOfExternalAllocatedMemory(int). Versuchen wir also eine andere Version von v8:

# yum downgrade v8 

Bei meinem Fedora 16-System hat dies v8 von 3.10 auf 3.6 gedauert. Und jetzt funktioniert nodejs!

0
ftrotter

Ich denke, John hat recht mit diesem Problem, aber seine Lösung hat für mich nicht funktioniert.

Ich habe hier die richtige Antwort für mich gefunden

von diesem Beitrag:

Der einfachste Weg, das Problem zu beheben, besteht darin, v8 und seine Abhängigkeiten zu entfernen und sie nur mit dem nodejs-stable-Repository neu zu installieren:

$ sudo yum -y remove v8 $ sudo yum localinstall --nogpgcheck http://nodejs.tchol.org/repocfg/fedora/nodejs-stable-release.noarch.rpm # You probably already have this repo installed $ sudo yum --disablerepo=* --enablerepo=nodejs-stable install nodejs-compat-symlinks npm 
Genau wie die andere Lösung, die hier erwähnt wird, funktioniert dies nur teilweise: Wenn Sie "yum upgrade" ausführen, wird v8 erneut auf eine neuere Version aktualisiert. Wissen Sie, ob es eine Möglichkeit gibt, Yum zu zwingen, v8 nur vom nodejs-stable Repo aus zu aktualisieren? Tiddo vor 12 Jahren 0