相关文章推荐
大鼻子的水龙头  ·  SpiderMonkey ...·  6 月前    · 
大鼻子的水龙头  ·  Moon Witch, Spider ...·  6 月前    · 

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
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 \n%s\n", script);
jsval rval;
  (!(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 \n%d\n",JSVAL_TO_INT(rval));
JS_DestroyContext(context);
JS_DestroyRuntime(runtime);
JS_ShutDown();
return EXIT_SUCCESS;
void usage()
   printf("example1 script_content\n");
   printf("for example:./example1 \"var a=1;b=2;a+b\"\n");

程序是摘自网上,搜索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