VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 416|回复: 13
打印 上一主题 下一主题

[原创] Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历

[复制链接]
001
81_avatar_middle
最佳答案
1 
跳转到指定楼层
1#
在线会员 发表于 2020-1-18 16:21:43 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 dark-f 于 2020-1-19 05:07 编辑

一、前言
最近在学习SpiderMonkey引擎,读了本坛liehuo大侠的帖子:
Windows系统编译制作SpiderMonkey最新版mozjs-31.2.0版本
内心也想试试,于是便有了本贴。其过程中的遭遇,对于一个初学者来说,可能是很痛苦的,故而记录下来,并贴而告之。一者记录一下自己的历程,再者对于也想做一些尝试的朋友,想必总有一点启示。

由于liehuo大侠的帖子写于2015年,现在已经进入2020年了,想必liehuo大侠如果扫一眼本贴,相信也有夫子当年的感概:逝者如斯夫吧!
自然大侠当年的最高版本是31,而近些年SpiderMonkey的更新速度较之以前更是无与伦比的。在mozilla的论坛上看到非release的版本最高已经70几了,就是官网Guide文档中虽然明说的release版本是52,却又提供了59的下载方法:
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
如果大家在网络上搜一下,也能找到60版的下载(如这个ftp地址:)
https://ftp.osuosl.org/pub/blfs/conglomeration/mozjs/
(插入链接出现问题了)
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
版本如此的日新月异,自然本人也就不好直接再去重现liehuo大侠当年的历程了。如是,我便从45入手。为什么选择从45入手呢?那是因为,我的电脑安装的vs是2013版的,而更高的SpiderMonkey至少是需要2015的update3以上的了。

好了,前言说完,那就动手吧!

二、痛苦经历
看了Mozilla官网中的说明,似乎从28版后,就不需要自己再去提前编译nspr了,原文截图如下
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
另外,有网友“道破红尘”在windows系统编译过45版本,其在帖子“Windows系统编译制作SpiderMonkey最新版mozjs-45.0.2版本”里, 确认不需要自己编译nspr以及编译过程中也不需要指定nspr的库路径,因为这些库已经内置了,其帖子地址:
Windows系统编译制作SpiderMonkey最新版mozjs-45.0.2版本 http://ntoskrnl.ltd/blog/00151359425876665cace9034e54751a1ba4b761bb6312f000
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历

这样就可以直接去编译mozjs-45.0.2了。首先,按照liehuo大侠或者官网的说法去下载制作工具包:MozillaBuild。
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
这样下载得到的是最新的制作工具包。(后面会说到,并不是最新的就是最好的,我的痛苦经历就是从最新开始的!)打开一看,首先内心就咯噔一下,因为没有发现:start-shell-msvc2013这个批处理文件,也没有2010或者2012的,只有一个start-shell。
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
(心想,应该是更先进了吧,其他什么也不需要了,人工智能更强了!)先把vs2013的路径在windows系统中的环境变量设置好:
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
接着就出现当头一棒,说我的电脑中没有msvcp140.dll文件,心里立即咯噔起来,这不是vs2015的动态库文件吗,难道没有vs2015不行吗(从最新开始的痛苦已经展开)?好在我已经保留了vs2015,那就安装吧!呵呵,谁知我下的是update2的,结果一安装说是找不到安装文件,要我网上找吗?好吧,只好网上找咯。(痛苦进行中)这一找就是5-6个小时(嘿嘿,我睡觉去了,你慢慢安装吧!),好不容易安装好vs2015,立即试试。前面很顺利,当然这只是建立目录,顺利也自然
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
那就让其设置去吧,等了一会儿结果出来了,确是错误信息
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
说是没有一个外部文件,到modules文件夹内一看,真没有这个zlib的文件夹。再看看log文件
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
说是缺少X11/Intrinsic.h,这是什么鬼?网上一搜,原来这玩意是linux系统的。有没有搞错,我用的是win10系统好不好?哪有这样的东西。(省略痛苦经历无数条,怀疑它的start-shell不智能啦,自己在里面直接设置运行环境变量,结果更多错误出现。更奇怪的是说是windows SDK版本比windows版本低,其实那时我已经下载了win10的最新SDK版本10.0.18362.0了,于是一狠心,把win10给重新刷一遍,还不行,再刷一遍,可怜的那个老旧电脑呀,还是机械硬盘,接连刷了两遍重装系统,估计已经到了奔溃边缘了!)

三、思考
后来在第二遍安装系统后,不装vs2015了,只装2013,但把msvcp和msvcpd的两个140动态库都备份了。我想log记录中的错误,是linux系统的安装库文件libx11-dev中的X11/Intrinsic.h文件缺失,这不是windows系统的问题,那问题出在哪里?至少不是自己系统的问题啦!那是否是源码有错误?根据网络上搜索到的和官网提供的,都下载下来,分别试验,结果都是一样,这说明问题不是出现在源码上(后来发现,问题还是出在源码上,当然MozillaBuild也有问题。),那问题在哪里?除掉自己的系统、源码,这个编译过程还有就是MozillaBuild了,难道是它的问题?
好,想到了就去试试!拿什么试呢?45版的不行了,换一个,那就38版的。于是下载了38版的。38版的release时间大约在2015年9月份,那么MozillaBuild我也选一个在那期间出来的。从ftp资源上可以看出1.9版的MozillaBuild正好与38版的时间吻合,就下载这个版本的试试。
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历

四、SpiderMonkey38版成功编译
原来1.9版的编译工具包中就有vs2013的shell了。
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
看来我思考的结果真的得到验证,只要是MozillaBuild对了,一切过程都非常顺利,很快编译结果就出来了
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
自然生成的dll和相应的lib文件都有了
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
那就检验一下,按照官网guide文档里的说明
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
来验证一下Y.js这个脚本运行的结果应该是120。
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
后来查看config的日志,才发现原来那个缺少X11/Intrinsic.h的致命错误仍然存在,看来设置中的那样错误并不影响编译,只是不知为何Mozilla团队为什么不fix这些?可能的原因的他们使用的是Linux编译系统(后面说45版的那个bug时,看到他们团队成员说那个bug尽在Windows系统出现,他们要激活那个bug还不容易呢,因此本人推断他们可能还不知哪些设置中的致命错误日志的事)。

五、SpiderMonkey45版本的编译
我这次下载了2.2.0版的MozillaBuild,因为这个时间与45版的release时间相近。
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
这次还是出现了linux系统的安装库文件libx11-dev中的X11/Intrinsic.h文件缺失同样问题。于是,我开始真正怀疑源码有错误了(可惜,“道破红尘”网友在他的帖子里并没有提到这个源码有bug的事)。在我走了无数的弯路,经历2次重装系统的痛苦,并在使用2.2.0版的MozillaBuild后,其问题依旧,使我确信问题出在源码上!于是,我开始网络搜索,结果在:
45版bug报告帖子 https://dev-tech-js-engine.mozilla.narkive.com/SLAj41he/spidermonkey-45-released
上发现了有人提问的问题同我出现的问题一样,但他以为是解压时出错了(实际上,如果用解压软件给下载的源码解压,就有那样的错误提示,但用MozillaBuild的shell来解压源码,是没有错误出现的),而在下面其他网友的回答中,出现了一个链接(图中的红圈中的链接)
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历

点开链接:
bug修复方法 https://bugzilla.mozilla.org/show_bug.cgi?id=1270036

Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
可以看到,这的确是个bug,并且已经修复了。修复的方法就在有五角星的红圈那个链接中。点击链接,得到一个修复文件的方法。
具体做法是:
在mozjs-45.0.2\js\src这个目录里,有一个make-source-package.sh的文件,打开这个文件(文本文件,可以用note打开的),将107和108行变成下图红圈中那样:
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
再下面有位Mihai的网友,提到他编译成功了。
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
方法如下:
1)在mozjs-45.0.2\modules目录里建立一个zlib的子目录
2)把src目录移到zlib目录内
3)建立一个moz.build的文件(你可以从别的目录中复制一个这样的文件来,然后用note打开,删除掉全部内容,再把下面的内容复制进去):
# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

DIRS += ['src']
保存即可。

好,至此希望bug完全修复,那我们开始编译吧。不错,这时设置过程没有再出错了。
命令如下:
cd e:/spider/mozjs-45.0.2/js/src  (说明:我把源码存在e盘的子目录spider下,这是把src目录当作当前工作目录)
autoconf-2.13  (说明:由autoconf-2.13来自动设置)
mkdir build_OPT.OBJ   (说明:在src目录下再建一个build_OPT.OBJ目录,这是编译release版本的目录)
cd build_OPT.OBJ  (说明:把build_OPT.OBJ这个目录当作工作目录,即编译的结果都在这个目录中)
../configure   (说明:由MozillaBuild进行设置,这里说明参数都不用带的,即nspr无需指定,源码中已经内置)
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
设置完成后开始编译
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
mozmake  (说明:windows系统的编辑命令。如果是Linux系统,命令为make)

经过比较长的时间编译,非常遗憾,编译仍然不成功。这次的原因出在vs2013 vc编译器上,所以,虽然这个版本要求Windows系统最低vs2013,但实际上vs2013的编译器仍不能满足要求。上面那个Mihai网友成功编译,其使用的是vs2015 X64。如此看来,要想完成45版的编译,还得安装vs2015(真心不想安装了),但为了SpiderMonkey,我再上vs2015。
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
(花了不少时间,终于把vs2015update3全部安装好)开始吧,首先把2015的环境变量添加上。
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
再重复vs2013那样的过程,先设置
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
再编译
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
这次终于编译成功
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
看看出来的结果文件
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
用自带的Y.js测试下
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历
测试成功,至此,整个编译过程全部结束(也不枉我把vs2015重装了几次)。

六、结束语
虽然这次的经历很折磨人,但感觉还是值得的,毕竟自己动手才能真正领悟其中的细节。本人觉得,如果要去编译SpiderMonkey的,注意一下步骤(28版本之后的):
1)自己电脑中设置好环境变量中的路径
2)注意每个版本的spidermonkey需要的最低等级vs
3)MozillaBuild不是最新的一定最好用
4)对于出现奇怪的错误信息,要分析可能出现的原因,可以根据出现的错误信息先在网络上搜索一下,看看是否是版本的bug,因为这个不是你改变自己电脑设置和安装软件能解决问题的。
好,希望对想试试的朋友有帮助!

评分

参与人数 6威望 +8 驿站币 +15 热心值 +12 收起 理由
77_avatar_small Health + 2 + 2 之前还真研究过这个东西,挺有意思!
82_avatar_small love_cctry + 1 + 1 很给力!
04_avatar_small xiao14116 + 2 + 2 赞一个!我之前也尝试过编译这个鬼东西,但.
75_avatar_small wl1383838438 + 6 + 6 + 3
01_avatar_small admin + 2 + 2 + 2 支持原创!
58_avatar_small thzzl + 2 + 2 很给力!

查看全部评分





上一篇:你生成的转储文件有问题吗?
下一篇:新春防范肺炎!
81_avatar_middle
最佳答案
1 
推荐
ico_lz  楼主| 发表于 2020-1-19 21:37:37 | 只看该作者
多谢楼上各位的支持!谢谢!谢谢!

下面继续报告mozjs-59.0a1.0的编译
既然已经安装了vs2015,那就干脆再把mozjs-59.0a1.0也编译一次吧。说做就做,还是用2.2.0的MozillaBuild(这个里面有vs2015的shell)。
同45版一样的步骤:

Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历

结果在设置时,检测到我的windows sdk只有10.0.10240,而该版本要求的最低是10.0.14393。

Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历

这个好办,上次在折腾的时候,我已经下载了最新的win10的sdk了,再安装一下即可。安装完成后,注意设置一下最新sdk的路径到环境变量中。

Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历

这次再设置,没有问题了,一切OK。

Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历

那就开始编译吧,经过一段时间编译,一切顺利,编译完成。

Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历

检测Y.js完全没有问题。

Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历

动态库和js的shell都在

Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历

静态库,以及动态库在编译工作目录下的js/src/build目录内

Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历

这次除了安装新的sdk外,一切异乎寻常的顺利。
58_avatar_middle
最佳答案
19 
2#
online_vip 发表于 2020-1-18 18:58:46 | 只看该作者
谢谢分享!
81_avatar_middle
最佳答案
1 
3#
ico_lz  楼主| 发表于 2020-1-18 21:45:05 | 只看该作者

多谢支持!多谢给加分!
81_avatar_middle
最佳答案
1 
4#
ico_lz  楼主| 发表于 2020-1-18 21:48:22 | 只看该作者
帖子中插超级链接怎么不正常了?
81_avatar_middle
最佳答案
1 
5#
ico_lz  楼主| 发表于 2020-1-19 04:59:10 | 只看该作者
多谢版主支持!多谢大家捧场!我一定继续努力,活跃本坛
98_avatar_middle
最佳答案
0 
6#
在线会员 发表于 2020-1-19 10:21:11 | 只看该作者
支持原创,支持技术贴
82_avatar_middle
最佳答案
9 
7#
在线会员 发表于 2020-1-19 15:13:59 | 只看该作者
这个有技术含量了。。。支持,我也要加油!
57_avatar_middle
最佳答案
0 
9#
在线会员 发表于 2020-1-20 18:12:44 | 只看该作者
最近我尝试编译google v8然鹅失败告终...python翻墙始终不成功
36_avatar_middle
最佳答案
0 
10#
在线会员 发表于 2020-2-5 12:23:33 | 只看该作者
checking the host C++ compiler version... 19.23.28107
checking the host C++ compiler works... yes
checking for 64-bit OS... no
checking bindgen cflags... no
checking for Windows SDK... 0x0a00 in 'D:\Windows Kits\10\'
checking for Universal CRT SDK... 10.0.18362.0 in 'D:\Windows Kits\10\'
checking for the Debug Interface Access SDK... d:/MICROS~1/2019/ENTERP~1/DIA SDK
checking for mt... 'd:/WINDOW~1/10/bin/100183~1.0/x86/mt.exe'
checking whether MT is really Microsoft Manifest Tool... yes
checking for link... not found
DEBUG: link: Trying link.exe
ERROR: Cannot find link

我的找不到 link.exe怎么处理啊  唉....发疯了
36_avatar_middle
最佳答案
0 
11#
在线会员 发表于 2020-2-5 14:00:25 | 只看该作者
Win10_X64系统编译SpiderMonkey的mozjs-45.0.2版本经历搞定了....感谢楼主  说实话 只能拿来参考..自己的机器编译完全出现不一样的问题....搞死人
36_avatar_middle
最佳答案
0 
12#
在线会员 发表于 2020-2-5 14:11:52 | 只看该作者
楼主  怎么编译x64版本啊?
81_avatar_middle
最佳答案
1 
13#
ico_lz  楼主| 发表于 2020-2-5 18:41:46 | 只看该作者
376408384 发表于 2020-2-5 14:11
楼主  怎么编译x64版本啊?

应该是你使用vs 64的,就能编译成64的呀
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-2-25 18:22

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表
时时彩平台排名 点点策略 杭州恒达资讯股票配资 亿泰智投 福建31选7 牛8配资 长江实业股票 搜搜配资 湖南快乐10分 股票行情 喜乐彩 北京金夆配资 南京股票配资网 360配资 红牛策略配资 金巷子配资 鼎泽配资