安卓 v8库的编译
巴博耘
2023-12-01
v8cgi是基于javascript v8引擎(chrome就采用这种引擎来进行javascript的解析)的一种语言,支持fastcgi的一种语言。通俗点说,就是能在服务器端运行的javascript语言。基础功能包括IO、GD、MySQL、Sockets、Templating、FastCGI、Apache模块,官方主页是:http://code.google.com/p/v8cgi/。 既然v8cgi支持fastcgi,那么无疑可以考虑通过nginx来支持运行它。在nginx的官方wiki上也有所介绍。 mkdir /opt/v8
cd /opt/v8
# 取出v8的代码
svn checkout http://v8.googlecode.com/svn/trunk/ v8
# 取出v8cgi的代码
svn checkout http://v8cgi.googlecode.com/svn/trunk/ v8cgi # 编译v8
cd v8
# 需要下载scons
sudo apt-get install scons
export GCC_VERSION=44
# 编译v8
# 注意:0.8.0版本在编译时出现错误,解决方法是参考http://code.google.com/p/v8/issues/detail?id=413&q=dereferencing%20pointer&colspec=ID%20Type%20Status%20Priority%20Owner%20Summary%20HW%20OS%20Area%20Stars这个页面的评论12楼和16楼,需要打上一个补丁,不过最新的版本不存在问题。一次编译通过。
scons mode=release library=shared snapshot=on
#编译后生成libv8.so文件
ln -s /opt/v8/v8/libv8.so /usr/lib/libv8.so
# 编译 v8cgi
cd ../v8cgi
# 编译之前需要安装相应的支持文档
scons reuse_context=0 mysql=1 pgsql=0 sqlite=0 gd=1 dom=1 module=0 verbose=0 gl=0 cgi=1 fcgi=1 cp v8cgi.conf.posix /etc/v8cgi.conf
# 将/etc/v8cgi.conf的 require.paths.push("/usr/lib/v8cgi") 改成 require.paths.push("/opt/v8/v8cgi/lib"); 这样v8cgi才能正确地加载到相应的模块
vi /etc/v8cgi.conf
# 将v8cgi做一个链接
ln -s /opt/v8/v8cgi/v8cgi /usr/local/bin/v8cgi #编写一个自动运行spawn-fcgi的文件:
vi ctl_v8ctl.sh #!/bin/sh
ESP_SCRIPT='/tmp/dummy.esp'
V8C_SCRIPT="/usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u spawn -g webserver `which v8cgi` $ESP_SCRIPT"
KIL_SCRIPT="killall -v -9 `which v8cgi`"
RETVAL=0
case "$1" in
start)
$V8C_SCRIPT
RETVAL=$? stop)
$KIL_SCRIPT
RETVAL=$? restart)
$KIL_SCRIPT
$V8C_SCRIPT
RETVAL=$? *)
echo "Usage: v8fcgi {start|stop|restart}"
exit 1 esac
ps aux | grep $ESP_SCRIPT | grep `which v8cgi`
exit $RETVAL
#修改conf/nginx.conf 修改默认server,增加一段解析v8脚本的location
location ~ \.(sjs|ssjs|esp)$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /opt/nginx/html$fastcgi_script_name;
include fastcgi_params; # 安装spawn-fcgi
sudo apt-get install spawn-fcgi # 运行spawn-fcgi
/opt/v8/v8cgi/ctl_v8cgi.sh start # 编写服务器端脚本
vi /opt/nginx/html/hello.esp 内容如下:
#!/usr/local/bin/v8cgi
response.write('Hello,World!'); 在地址栏里输入http://localhost/hello.esp,即可看到“Hello,World!”这几个字母了。
安装相应功能的支持可参考http://code.google.com/p/v8cgi/wiki/Compiling
sudo apt-get install libmysqlclient-dev libfcgi-dev libgd2-dev libxerces-c-dev 参考页面:
1、http://wiki.nginx.org/NginxV8cgi
2、http://code.google.com/p/v8cgi/wiki/Compiling
3、http://code.google.com/p/v8cgi/wiki/InstallOnUbuntu9