zoukankan      html  css  js  c++  java
  • 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 
    %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
  • 相关阅读:
    Nginx专题(二)-----虚拟主机、location规则、rewrite、负载均衡配置
    Nginx专题(一)-----简介
    springMVC自动转义问题
    Tomcat专题(三)-----Tomcat性能优化
    Tomcat专题(二)-----Tomcat源码、嵌入式Tomcat
    Tomcat专题(一)-----架构体系
    jvm性能调优(五)-----深入了解性能优化
    jvm性能调优(四)-----编写高效的java代码
    jvm性能调优(三)-----JVM的执行子系统
    jvm性能调优(二)-----垃圾回收、内存分配
  • 原文地址:https://www.cnblogs.com/chenfool/p/3840625.html
Copyright © 2011-2022 走看看