如何使用 clang 在 FreeBSD 上构建 Google V8?

如何使用 clang 在 FreeBSD 上构建 Google V8?

我正在尝试使用 clang 在 FreeBSD 9.1 上构建 Google 的 V8,并遇到以下错误:

/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"

一些版本信息:

# 铿锵有力
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 检出 http://v8.googlecode.com/svn/trunk/ v8
# uname -a
FreeBSD thug 9.1-RC3 FreeBSD 9.1-RC3 #0 r242324:2012 年 10 月 30 日星期二 00:58:57 UTC     [电子邮件保护]:/usr/obj/usr/src/sys/GENERIC amd64

什么原因导致此链接错误?

答案1

FreeBSD 在 ports 系统中提供了 3.18.5 版本。

如果这对你来说还不够新的话,至少看一下/usr/ports/lang/v8/Makefile。似乎 v8 需要一些特殊选项,请参阅以下摘自 port 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 版本,似乎您需要添加到 CFLAGS。并且您需要为; 和-Wno-unused-private-field指定几个额外的参数makelibrary=sharedstrictaliasing=off

相关内容