Wie kann ich Google V8 unter FreeBSD mit Clang erstellen?

865
Utkonos

Ich versuche, Googles V8 unter FreeBSD 9.1 mit clang zu erstellen und dabei auf den folgenden Fehler zu stoßen:

/usr/bin/ld: final link failed: Nonrepresentable section on output clang++: error: linker command failed with exit code 1 (use -v to see invocation) gmake[1]: *** [/root/v8/out/x64.release/cctest] Error 1 gmake[1]: Leaving directory `/root/v8/out' gmake: *** [x64.release] Error 2 

Ich musste gmake anstelle von make verwenden und fügte Folgendes hinzu:

setenv CC /usr/bin/clang setenv CXX /usr/bin/clang++ setenv GYP_DEFINES "clang=1" 

Einige Versionsinformationen:

# clang -v FreeBSD clang Version 3.1 (Zweige / Version_31 156863) 20120523 Ziel: x86_64-unknown-freebsd9.0 Gewindemodell: Posix # gmake -v GNU Make 3.82 Gebaut für amd64-portbld-freebsd9.1 

Befehl zur Überprüfung von V8-Code:

# svn checkout http://v8.googlecode.com/svn/trunk/ v8 
# uname -a FreeBSD-Schläger 9.1-RC3 FreeBSD 9.1-RC3 # 0 r242324: Di 30.10 

Was verursacht diesen Verbindungsfehler?

2

1 Antwort auf die Frage

1
Roland Smith

FreeBSD verfügt über die Version 3.18.5 im Ports-System.

Wenn das für Sie nicht neu genug ist, schauen Sie sich das an /usr/ports/lang/v8/Makefile. Es scheint, dass v8 einige spezielle Optionen benötigt, siehe den folgenden Auszug aus dem Port-Makefile:

ALL_TARGET= native MAKE_ARGS= library=shared  .include <bsd.port.pre.mk> .if $ == "clang" || $ == "clang++" || $ >= 1000024 _CLANG!= clang --version | $ -1 | $ -e 's/.*clang version \([0-9]\)\.\([0-9]\).*/\1\2/' MAKE_ENV+= LINK=clang++ CFLAGS+= -Wno-unused-private-field .if $ >= 33 CFLAGS+= -Wno-nested-anon-types -Wno-unused-function .endif .else MAKE_ARGS+= strictaliasing=off USE_GCC= any .endif 

Für Ihre Version von Clang scheint es, dass Sie -Wno-unused-private-fieldCFLAGS hinzufügen müssen. Und Sie müssen ein paar zusätzliche Argumente angeben make; library=sharedundstrictaliasing=off