VS2010 编译 SpiderMonkey 1.8.5 静态库版本[通俗易懂]

VS2010 编译 SpiderMonkey 1.8.5 静态库版本[通俗易懂]大家好,前段时间看到VC驿站上面会员发布了一篇文章《Windows系统编译制作SpiderMonkey最新版mozjs-31.2.0版本》,地址为:http://www.cctry.com/thread-250698-1-1.html过程写的很详细,使用的也是目前来说SpiderMonkey的最新版本31.2.0,不过我之前用的一直是1.8.5版本,用老的版本编译出来的SpiderMonkey

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用
大家好,前段时间看到
VC驿站
上面会员发布了一篇文章《Windows系统编译制作SpiderMonkey最新版mozjs-31.2.0版本》,地址为:
http://www.cctry.com/thread-250698-1-1.html


过程写的很详细,使用的也是目前来说SpiderMonkey的最新版本31.2.0,不过我之前用的一直是1.8.5版本,用老的版本编译出来的SpiderMonkey库也比较小,我喜欢,哈哈!


于是,自己动手再次编译一下,因为总带着个共享版DLL也麻烦,所以,今天准备直接编译个SpiderMonkey的
静态库lib版本
,这样调用起来就方便啦,哈哈!
VS2010 编译 SpiderMonkey 1.8.5 静态库版本[通俗易懂]
 




开始动手。。。




1、下载工具包组件及源码:


①、SpiderMonkey1.8.5 源码:
http://ftp.mozilla.org/pub/mozilla.org/js/js185-1.0.0.tar.gz


②、MozillaBuild 1.6 组件:
https://ftp.mozilla.org/pub/mozi … aBuildSetup-1.6.exe


③、NPSR 4.8.9 源码:
http://ftp.mozilla.org/pub/mozil … c/nspr-4.8.9.tar.gz




为防止连接失效,特传到网盘一份,地址:


链接: 
http://pan.baidu.com/s/1gdITf9p
 密码: fikp




2、解压:


解压 SpiderMonkey1.8.5 源码包 js185-1.0.0.tar.gz 到 H:\spider 目录下,实际路径为:H:\spider\js-1.8.5


解压 MozillaBuild 1.6 组件 MozillaBuildSetup-1.6.exe 到 H:\spider 目录下,实际路径为:H:\spider\mozilla-build


解压 NPSR 4.8.9 源码包 nspr-4.8.9.tar.gz 到 H:\spider 目录下,实际路径为:H:\spider\nspr-4.8.9




如下图:






备注:这里的 H 盘可以为任何盘符,spider也只是一个文件夹的名字,可以任意指定,只要保证 js-1.8.5、mozilla-build、nspr-4.8.9 在同一目录下即可,这样方便切换和管理。




3、启动编译环境:


启动CMD命令行窗口,并切换到 mozilla-build 目录下,按照您当前系统安装的vs版本,启动相应的bat文件,我当前电脑上装的是 vs2010,所以,我启动的是 start-msvc10.bat 脚本,如下图:






备注:这是一个类似Unix的命令行。目录名都要用反斜杠 /,驱动器也是当作一目录。例如,要进入H 盘根目录下的 spider 目录,就要执行cd /h/spider




//


// 备注:本篇文章来自 vc驿站:
http://www.cctry.com/thread-252599-1-1.html


// C、C++、VC++ 各种学习资源,免费教程,期待您的加入!


//




4、编译:




①、编译 NPSR 4.8.9 非调试 Release 版本库:




切换路径到 H:\spider\nspr-4.8.9 下,一条一条以此执行以下命令:


cd /h/spider/nspr-4.8.9


mkdir Release


cd Release


../mozilla/nsprpub/configure –disable-debug –enable-optimize –enable-win32-target=WIN95


make




即可完成 NPSR 4.8.9 非调试 Release 版本库的编译。执行过程比较慢,会用几分钟的时间。。。




相关截图如下:














②、编译 SpiderMonkey1.8.5 非调试 Release 版本库:




切换路径到 H:\spider\js-1.8.5\js\src 下,一条一条以此执行以下命令:


cd /h/spider/js-1.8.5/js/src


autoconf-2.13


mkdir Release


cd Release


../configure –enable-static –disable-shared-js –enable-optimize –enable-win32-target=WIN95


make




即可完成 SpiderMonkey1.8.5 非调试 Release 版本库的编译。执行过程比较慢,会用几分钟的时间。。。




备注:默认 SpiderMonkey 是使用 MD 来编译的,如果想使用 MT 请在执行 autoconf-2.13 命令之前修改:src\confg 目录下的 config.mk 文件,把 -MD 改成 -MT。




相关截图如下:






















编译完成之后,大家就可以在 H:\spider\js-1.8.5\js\src\Release\dist 路径下找到 SpiderMonkey1.8.5 的编译出来的文件了。




我们真正要的只有两个目录的文件:


include 目录下有很多头文件,是用作其他工程包含的头文件;


lib         目录下有一个静态库文件 js_static.lib,这个静态库就是我们要的,看下个头,15M左右,嘿,个头真不小,基本功能应该都在里面了
VS2010 编译 SpiderMonkey 1.8.5 静态库版本[通俗易懂]
 




//


// 备注:本篇文章来自 vc驿站:
http://www.cctry.com/thread-252599-1-1.html


// C、C++、VC++ 各种学习资源,免费教程,期待您的加入!


//




5、使用:


原本使用步骤不想写了,但是在使用过程中还真遇到问题了,于是就写出来吧!




①、新建一控制台类型的工程:spTest


②、在 spTest 工程目录下新建一文件夹:js185_static,将 H:\spider\js-1.8.5\js\src\Release\dist 路径下的 include、lib 两个目录拷贝到 js185_static 目录下;


③、将 js185_static/include 添加到 spTest 工程设置的 include 下面,如下图:






④、在 spTest.cpp 文件顶部加上如下代码:

  1. #include <jsapi.h>
  2. #pragma comment(lib, “./js185_static/lib/js_static.lib”)

复制代码





⑤、添加测试代码,测试 spidermonkey 功能是否正常:

  1. static JSClass global_class = {

  2.         “global”, JSCLASS_GLOBAL_FLAGS,
  3.         JS_PropertyStub, JS_PropertyStub, JS_PropertyStub, JS_StrictPropertyStub,
  4.         JS_EnumerateStub, JS_ResolveStub, JS_ConvertStub, JS_FinalizeStub,
  5.         JSCLASS_NO_OPTIONAL_MEMBERS
  6. };

  7. void report_error(JSContext *cx,  const char *message, JSErrorReport *report)
  8. {

  9.         fprintf(stderr, “%s:%u:%s\n”,
  10.                 report->filename ? report->filename : “<no filename>”, 
  11.                 (unsigned int) report->lineno, 
  12.                 message);
  13. }

  14. int _tmain(int argc, _TCHAR* argv[])
  15. {

  16.         JSRuntime *runtime = NULL;
  17.         JSContext *context = NULL;
  18.         JSObject *global = NULL;

  19.         //创建新的运行时8M
  20.         runtime = JS_NewRuntime(8L * 1024L * 1024L); 
  21.         if (runtime == NULL) return -1;

  22.         //创建新的上下文
  23.         context = JS_NewContext(runtime, 8*1024); 
  24.         if (context == NULL) return -1; 

  25.         JS_SetOptions(context, JSOPTION_VAROBJFIX);
  26.         JS_SetErrorReporter(context, report_error);

  27.         //创建一个新的JavaScript对象
  28.         global = JS_NewCompartmentAndGlobalObject(context, &global_class, NULL); 
  29.         if (global == NULL) return -1; 

  30.         //实例化global, 加入对象,数组等支持
  31.         if (!JS_InitStandardClasses(context, global)) return -1; 

  32.         // 使用 global, context 等来完成其他操作,用户定制代码由此开始
  33.         jsval rval;
  34.         char *script = “(function(a, b){return a * b;})(15, 6);”;

  35.         JSBool status = JS_EvaluateScript(context, global, script, strlen(script), NULL, 0, &rval);
  36.         if (status == JS_TRUE){ 
  37.                 jsdouble d; 
  38.                 JS_ValueToNumber(context, rval, &d); 
  39.                 printf(“eval result = %f\n”, d); 
  40.         }

  41.         JS_DestroyContext(context); //释放上下文对象
  42.         JS_DestroyRuntime(runtime); //释放运行时环境
  43.         JS_ShutDown(); //停止JS虚拟机

  44.         return 0;
  45. }

复制代码





编译执行,结果链接的过程中出现问题了,如下图:






好吧,说我没定义,我就定义,当前是Windows系统,所以,我在 #include <jsapi.h> 的上面加上:

  1. #define XP_WIN

复制代码





一编译,结果又报了一堆链接错误,如下图:






这就是关键了,网上很多文章都没介绍这个,经我的一番搜索,靠我的生平所学,终于找到了,再加上个宏定义,如下:

  1. #define STATIC_JS_API

复制代码





加上之后,还好,链接错误少了很多,不过又有这个链接错误,如下图:






还好,timeEndPeriod 和 timeBeginPeriod 两个函数是系统函数,经过查询MSDN,得知这两个函数的 lib 库是:Winmm.lib,于是加上这句代码:

  1. #pragma comment(lib, “Winmm.lib”)

复制代码





至此,问题终于全部解决了,如下图:






执行结果如下:






好了。。。文章到这里就结束了,希望对大家有帮助,编译好的相关库都给大家打包了,工程也打包了,在下面的附件中!




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181318.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Linux主机网卡绑定bond0详解

    Linux主机网卡绑定bond0详解 1什么是bond        网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡的冗余,带宽扩容和负载均衡,在生产场景中是一种常用的技术。Kernels2.4.12及以后的版本均供bonding模块,以前的版本可以通过patch实现。可以通过以下命令确定内核是否支持bonding:…

    2022年4月8日
    287
  • matlab经典案例_小苹果最炫民族风串烧

    matlab经典案例_小苹果最炫民族风串烧%Mostshiningnationalwind//最炫民族风onMatlab%TheModificationisfrom”canon”,notbymefs=44100;%sampleratedt=1/fs;T16=0.125;t16=[0:dt:T16];[tempk]=size(t16);t4=linspace(0,4*T16,4*k…

    2022年9月22日
    4
  • (c语言)选择排序法和冒泡排序法

    (c语言)选择排序法和冒泡排序法问题描述:给定一个数组(或者输入一个数组),分别运用选择排序法和冒泡排序法将所要的结果输出。程序分析:                    选择排序1>.对于选择排序,首先理解排序的思想。给定一个数组,这种思想首先假定数组的首元素为最大(最小)的。此时就要利用3个变量i,j,k表示元素的下标。i表示当前,j表示找到的最大(最小)的下标,k用

    2022年6月25日
    25
  • idea激活码2019版激活方式实测可用

    今天来更新一下2019版本的idea激活方式。

    2022年3月14日
    85
  • 启动马达接线实物图_电机的星三角降压启动实物接线图怎么画?

    启动马达接线实物图_电机的星三角降压启动实物接线图怎么画?展开全部电机的星三角降压启动实物接线图如下:基本原理就32313133353236313431303231363533e4b893e5b19e31333365666265是:启动时先用Y型接法电路,使得电机加载电压为220V,这样减少系统负荷防止过载;电机启动后,改成三角型接法电路,使得电压为380V,进行正常运转。这样的起动电流只有全压起动时的1/3,有效保护电机以及电路系统,防止电流过载…

    2022年5月3日
    91
  • java抽象类和抽象方法[通俗易懂]

    java抽象类和抽象方法[通俗易懂]1.抽象的概念2.抽象类和抽象方法的使用1//抽象方法和抽象类的格式:2/*抽象方法:就是加上abstract关键字,然后去掉大括号,直接分号结束;3抽象类:抽象方法所在的类,必须是抽象

    2022年7月3日
    27

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号