spidermonkey 源码下载:http://ftp.mozilla.org/pub/mozilla.org/js/
测试系统 Ubuntu 12.04, js 1.7.0, js 解压在/opt/js 路径下
tar -zxvf js-1.7.0.tar.gz -C /opt
SpiderMonkey 编译步骤:
1 登录源码目录
cd /opt/js/src
2 编译
make -f Makefile.req
编译好之后,编译文件会在/opt/js/src/Linux_All_DBG.OBJ
其中js 是一个js 的交互式客户端
libjs.so libjs.a 是动态库与静态库
我们还需要手工移动一下一个头文件,估计是他们源码里写错了
mv /opt/js/src/Linux_All_DBG.OBJ/jsautocfg.h /opt/js/src/
下面我们写一个spidermonkey 的Hello World 程序
#include "jsapi.h" #include "stdlib.h" #include "string.h" static void usage(); int main(int argc,const char* argv[]) { if(argc!=2){ usage(); exit(-1); } JSRuntime *runtime = NULL; JSContext *context = NULL; JSObject *global = NULL; const char *script = argv[1]; printf("script is %s ", script); jsval rval; if ( (!(runtime = JS_NewRuntime(1024L * 1024L))) || (!(context = JS_NewContext(runtime, 8192))) || (!(global = JS_NewObject(context, NULL, NULL, NULL))) ) return EXIT_FAILURE; if (!JS_InitStandardClasses(context, global)) return EXIT_FAILURE; if (!JS_EvaluateScript(context, global, script, strlen(script), "script", 1, &rval)) return EXIT_FAILURE; printf("the script's result is %d ",JSVAL_TO_INT(rval)); JS_DestroyContext(context); JS_DestroyRuntime(runtime); JS_ShutDown(); return EXIT_SUCCESS; } void usage() { printf("example1 script_content "); printf("for example:./example1 "var a=1;b=2;a+b" "); }
程序是摘自网上,搜索SpiderMonkey 学习,大部分都是将这个程序。
gcc 编译命令
gcc -DXP_UNIX -I/opt/js/src -o excample test.c -L/opt/js/src/Linux_All_DBG.OBJ -ljs -lm
编译出来一个excample 的程序
要运行,还需添加系统的环境变量
export LD_LIBRARY_PATH=/opt/js/src/Linux_All_DBG.OBJ
测试一下
./excample "var a=1;var b=2;a+b"
输出
script is var a=1;var b=2;a+b the script's result is 3