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
