Как я могу собрать Google V8 на FreeBSD с помощью clang?

849
Utkonos

Я пытаюсь собрать Google V8 на FreeBSD 9.1, используя clang и столкнувшись со следующей ошибкой:

/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 

Мне нужно было использовать gmake вместо make, и я добавил следующее для использования clang:

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

Некоторая информация о версии:

# clang -v FreeBSD clang версия 3.1 (филиалы / release_31 156863) 20120523 Цель: x86_64-unknown-freebsd9.0 Модель потока: posix # gmake -v GNU Make 3.82 Создан для amd64-portbld-freebsd9.1 

команда используется для проверки кода v8:

# svn checkout http://v8.googlecode.com/svn/trunk/ v8 
# uname -a FreeBSD thug 9.1-RC3 FreeBSD 9.1-RC3 # 0 r242324: вт 30 октября 00:58:57 UTC 2012 root@farrell.cse.buffalo.edu: / usr / obj / usr / src / sys / GENERIC amd64 

Что вызывает эту ошибку связывания?

2

1 ответ на вопрос

1
Roland Smith

FreeBSD имеет версию 3.18.5, доступную в системе портов.

Если это не достаточно ново для вас, по крайней мере, посмотрите /usr/ports/lang/v8/Makefile. Кажется, v8 нужны некоторые специальные опции, смотрите следующую выдержку из порта 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 

Похоже, что для вашей версии clang вам нужно добавить -Wno-unused-private-fieldв CFLAGS. И вам нужно будет указать пару дополнительных аргументов для make; library=sharedа такжеstrictaliasing=off