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..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 入门学习(一)的更多相关文章
- vue入门学习(基础篇)
vue入门学习总结: vue的一个组件包括三部分:template.style.script. vue的数据在data中定义使用. 数据渲染指令:v-text.v-html.{{}}. 隐藏未编译的标 ...
- Hadoop入门学习笔记---part4
紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...
- Hadoop入门学习笔记---part3
2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...
- PyQt4入门学习笔记(三)
# PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...
- PyQt4入门学习笔记(一)
PyQt4入门学习笔记(一) 一直没有找到什么好的pyqt4的教程,偶然在google上搜到一篇不错的入门文档,翻译过来,留以后再复习. 原始链接如下: http://zetcode.com/gui/ ...
- Hadoop入门学习笔记---part2
在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...
- Retrofit 入门学习
Retrofit 入门学习官方RetrofitAPI 官方的一个例子 public interface GitHubService { @GET("users/{user}/repos&qu ...
- MyBatis入门学习教程-使用MyBatis对表执行CRUD操作
上一篇MyBatis学习总结(一)--MyBatis快速入门中我们讲了如何使用Mybatis查询users表中的数据,算是对MyBatis有一个初步的入门了,今天讲解一下如何使用MyBatis对use ...
- opengl入门学习
OpenGL入门学习 说起编程作图,大概还有很多人想起TC的#include <graphics.h>吧? 但是各位是否想过,那些画面绚丽的PC游戏是如何编写出来的?就靠TC那可怜的640 ...
随机推荐
- ReentrantLock和Synchronized
1 synchronized 1.1 一旦没有获取到就只能一直等待 A和B都获取同一个对象锁,如果A获取了,B没有获取到,那么在A释放该锁之前,B只能无穷等待下去. 1.2 synchronized是 ...
- 看不懂JDK8的流操作?5分钟带你入门(转)
在JDK1.8里有两个非常高级的新操作,它们分别是:Lambda 表达式和 Stream 流. Lambda表达式 让我们先说说 Lambda 表达式吧,这个表达式最大的作用就是简化语法,让代码更加易 ...
- Sql Server 2016 创建内存数据库
官方教程:https://docs.microsoft.com/en-us/sql/relational-databases/in-memory-oltp/survey-of-initial-area ...
- ubuntu搭建nginx
1.下载nginx压缩包 2.上传.解压 tar -zxvf nginx-1.8.0.tar.gz cd nginx-1.8.0 3.安装 make install 4.启动,停止 ,重启 服务 可 ...
- Vue中的计算属性和监听器(computed 与 watch)
react中数据是单向绑定的,而vue中数据是双向绑定的.为什么? 在react中,主要是通过setState 去改变state的值:而在vue中,会自动的触发set 与get 改变属性的值. 在vu ...
- Codeforces Round #376 (Div. 2) D. 80-th Level Archeology —— 差分法 + 线段扫描法
题目链接:http://codeforces.com/contest/731/problem/D D. 80-th Level Archeology time limit per test 2 sec ...
- 近期测试BUG总结
前些日子上线了新版的app,在上线后发现了几个重大的bug,在此总结,在以后的测试工作中需要额外的关注. 需求流程bug 页面刷新bug 标签栏刷新bug 第一个bug出现的原因是产品需求与运营实际操 ...
- liunx下解压压缩命令详细介绍
Linux下的压缩解压缩命令详解及实例 实例:压缩服务器上当前目录的内容为xxx.zip文件 zip -r xxx.zip ./* 解压zip文件到当前目录 unzip filename.zip == ...
- bzoj 3481 DZY Loves Math III——反演+rho分解质因数
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3481 推推式子发现:令Q=gcd(P,Q),ans=Σ(d|Q) d*phi(P/d).把 ...
- 将List<T>集合用DataGridView展示
一.若要将List<T>集合的值赋值给DataGridView,首先要DataGridView中的列的DataPropertyName的值要和此集合的T类型的属性字段的名称,类型一致,并且 ...