Как я могу собрать Google V8 на FreeBSD с помощью clang?
Я пытаюсь собрать 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
Что вызывает эту ошибку связывания?
1 ответ
FreeBSD имеет версию 3.18.5, доступную в системе портов.
Если это не достаточно ново для вас, по крайней мере, посмотрите на /usr/ports/lang/v8/Makefile
, Похоже, v8 нуждается в некоторых специальных параметрах, смотрите следующую выдержку из порта Makefile:
ALL_TARGET= native
MAKE_ARGS= library=shared
.include <bsd.port.pre.mk>
.if ${CC:T:Mclang} == "clang" || ${CXX:T:Mclang++} == "clang++" || ${OSVERSION} >= 1000024
_CLANG!= clang --version | ${HEAD} -1 | ${SED} -e 's/.*clang version \([0-9]\)\.\([0-9]\).*/\1\2/'
MAKE_ENV+= LINK=clang++
CFLAGS+= -Wno-unused-private-field
.if ${_CLANG} >= 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