spidermonkey 源码下载:http://ftp.mozilla.org/pub/mozilla.org/js/

测试系统 Ubuntu 12.04, js 1.7.0, js 解压在/opt/js 路径下

tar -zxvf js-1.7..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!=){
usage();
exit(-);
}
JSRuntime *runtime = NULL; JSContext *context = NULL; JSObject *global = NULL; const char *script = argv[]; printf("script is \n%s\n", script); jsval rval; if (
(!(runtime = JS_NewRuntime(1024L * 1024L)))
|| (!(context = JS_NewContext(runtime, )))
|| (!(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", , &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=;var b=;a+b
the script's result is

SpiderMonkey 入门学习(一)的更多相关文章

  1. vue入门学习(基础篇)

    vue入门学习总结: vue的一个组件包括三部分:template.style.script. vue的数据在data中定义使用. 数据渲染指令:v-text.v-html.{{}}. 隐藏未编译的标 ...

  2. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  3. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  4. PyQt4入门学习笔记(三)

    # PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...

  5. PyQt4入门学习笔记(一)

    PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...

  6. Hadoop入门学习笔记---part2

    在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...

  7. Retrofit 入门学习

    Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos&qu ...

  8. MyBatis入门学习教程-使用MyBatis对表执行CRUD操作

    上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...

  9. opengl入门学习

    OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...

随机推荐

  1. c# 怎么获取自己的IP地址

    1.aspx页面,asp.net项目的页面 <%@ Page Language="C#" AutoEventWireup="true" CodeBehin ...

  2. Spark SQL includes a cost-based optimizer, columnar storage and code generation to make queries fast.

    https://spark.apache.org/sql/ Performance & Scalability Spark SQL includes a cost-based optimize ...

  3. [JAVA &#183; 0基础]:16.经常使用类

    基本类型包装 为什么须要包装类? JAVA并非纯面向对象的语言.Java语言是一个面向对象的语言.可是Java中的基本数据类型却是不面向对象的.可是我们在实际使用中常常须要将基本数据转化成对象,便于操 ...

  4. iOS 第三方登录之 QQ登录

    一. 首先需要下载腾讯qq登录所需的库,下载地址是http://open.qq.com/ . 需要用到的有TencentOpenAPI.framework 和TencentOpenApi_IOS_Bu ...

  5. [bzoj1002] [FJOI2007]轮状病毒轮状病毒(基尔霍夫矩阵)

    Description 轮状病毒有很多变种,所有轮状病毒的变种都是从一个轮状基产生的.一个N轮状基由圆环上N个不同的基原子 和圆心处一个核原子构成的,2个原子之间的边表示这2个原子之间的信息通道.如下 ...

  6. 人生苦短之Python枚举类型enum

    枚举类型enum是比较重要的一个数据类型,它是一种数据类型而不是数据结构,我们通常将一组常用的常数声明成枚举类型方便后续的使用.当一个变量有几种可能的取值的时候,我们将它定义为枚举类型.在Python ...

  7. spring类扫描注入-----类扫描的注解解析器

    通过类扫描注入到容器中,这种方式,在实际开发中还是很常用的,可以看下自己的配置文件,就会发现,自己公司的项目,搞不好就是这么注入的. 起码,我发现我公司的项目就是这么干的. 下面来演示一下简单的例子: ...

  8. struts2 小例子(教训篇)

    学了一阵子的struts2了,到了最后,想自己写个小程序,发现最简单的配置文件都 竟然能弄错,是我这几天睡眠不足么.怎么可能,爱好这门的,怎么会这样.这样真的很伤心啊.小小心灵受不了这种打击啊.... ...

  9. html5--5-12 渐变色

    html5--5-12 渐变色 学习要点 掌握渐变色的绘制方法 渐变色绘制方法 createLinearGradient() 创建线性渐变 createLinearGradient(x1,y1,x2, ...

  10. NMS 原理 了解

    NMS 原理:对于Bounding Box的列表B及其对应的置信度S,采用下面的计算方式.选择具有最大score的检测框M,将其从B集合中移除并加入到最终的检测结果D中.通常将B中剩余检测框中与M的I ...