2013
Aug
31





安装 gclient

gclient 是一个可以同时支援 SVN 与 GIT 的工具,因为编辑 V8 Engine 时,必须用到这个小工具,所以我们得先安装它,安装的方式如下:


安装好后,输入 gclient ,测试看看这个指令能不能使用。

安装 Javascript V8 Engine

安装 V8 需要先知道自已的 cpu 是 32 位元,还是 64 位元, 我的电脑是 32 位元,所以我指定 ia32.release , release 也可以改成 debug,如果你是使用 64 位元的系统,那么你可以用 x64.release

  • git clone git://github.com/v8/v8.git src
  • cd src && make dependencies && make ia32.release library=shared soname_version=1.0 console=readline snapshot=off werror=no

我会用到 d8 这个 v8 command 程式,所以多加了 console=readline ,另外 v8 预设编译的时候会自动将 warning 转到 error ,这样会导致一点点小小的 warning 就造成编译失败,加上 werror=no 就可以解决这个问题。

上两步执行成功后,out/ia32.release/ 资料夹就会出现 libv8.so.1.0 这个重要的 v8 shared object ,接下来,就把这个档案装到系统 lib 资料夹下,而因为我还要开发 v8 extension ,所以还必需要将 header 档搬到 inlcude 底下。

  • cd src && cp out/ia32.release/lib.target/libv8.so.1.0 /usr/local/lib/ && cp out/ia32.release/d8 /usr/local/bin/
  • ln -sf /usr/local/lib/libv8.so.1.0 /usr/local/lib/libv8.so
  • cd src && if [
-d /usr/local/include/v8 ]; then mkdir /usr/local/include/v8; fi;
  • cd src && cp include/*.h /usr/local/include/v8/

编译问题处理

问题一: archives - ar 版本太旧

错误讯息: error: ar crT libutils.a base64.o common.o ip_addr.o radiotap.o trace.o uuid.o wpa_debug.o wpabuf.o os_unix.o eloop.o
ar: illegal option -- T

这个问题发生的原因是 /usr/bin/ar 不支援这个功能 -T 这个参数,有可能是因为 binutil 版本太旧,所以只要升级到 binutils-2.23.1 即可。

问题二: 未指定 link libcurses

错误讯息: LINK(target) xxx/v8/src/out/ia32.release/d8
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetnum'
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetent'
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetstr'
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgoto'
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `UP'
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `BC'
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tputs'
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `PC'
/usr/lib/gcc/i386-redhat-linux/4.1.2/../../../libreadline.so: undefined reference to `tgetflag'
解决方式就要在 v8 编译的时候,指定 link libcurse

修改档案: trunk/out/src/d8.target.ia32.mk , 将 -lcurse 加入至 LIBS 这个参数。

d8.target.ia32.mk
  1. LIBS := \
  2. -lreadline\
  3. -lcurses

相关资料


回應 (Leave a comment)