SpiderMonkey 入門學習(一)


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 \n%s\n", 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 \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
3

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM