文章目录
前言
quickjs是个很厉害的东西啊,我一直想编译一下的,奈何一直没成功。现在找了点时间成功编译了,写篇文章记录一下。当前版本:2024-1-13
应该没人写过教程,是目前最新的了。
准备
C编译器
QuickJS是用纯C,C89写的,这意味着你需要的C编译器要求很低。最小的tcc,10MB也是可以的,但我不建议(具体原因一会说),建议使用msvc或gcc。我使用的是gcc。
Windows下gcc分为msys2和mingw,msys2相对重量级一点,我没有装,我用的是mingw。当然,如果你装了msys2也可以,不过你也可以参考这篇文章,同时,这篇文章也讲了支持从js加载dll的方法。
xmake
xmake是一个轻量化的,基于lua的C/C++构建环境,使用起来非常方便。官网是<xmake.io>,配置很方便,官方提供了傻瓜式的安装包。它支持msvc、gcc/mingw、clang等编译器,不过不支持tcc,所以如果你只装了tcc,就没法用xmake编译了。
编译包
xmake是用xmake.lua
文件控制编译选项的,而这个玩意正好有人帮我们写好了,进入上面这个仓库,你可以选择把整个zip下下来,也可以选择只下载xmake.lua
文件,反正我们只需要这个。
QuickJS的源代码在这,找到QuickJS source code: quickjs-XXXX-XX-XX.tar.xz
,点击链接下载。
(啊当然,如果你只想玩玩,不是一定要编译的话,再下面有个Binary releases
你一定不会看不见吧。。)
工程准备
新建文件夹,把上面下载的quickjs-xmake
解压进去。如果你下的是单个xmake.lua
文件也行,直接放进去就行了,但要记得新建一个叫quickjs的文件夹。
文件目录如下:
++Project
|--quickjs
| |--空
|--xmake.lua
|--repl.c 【请删除这个文件!】
删除repl.c是因为这是旧版本的,不适于现在的版本。
然后把quickjs-XXXX-XX-XX.tar.xz
解压进去,注意这是双层压缩包。
此时在此目录里可以用xmake f -p mingw
切换mingw/gcc环境(Windows下默认msvc)
修改版本号
这步是可选的,但建议做一下。
quickjs文件夹里面有个VERSION
文件,包含版本号(当然压缩包文件名里也有),复制一下,打开xmake.lua
,修改第5行,把
lua
add_defines("CONFIG_VERSION=\"2020-11-08\"")
改成
lua
add_defines("CONFIG_VERSION=\"2024-01-13\"")
注意不要手欠不小心多干掉个\
或"
了。。
第一遍编译
编译需要两遍,第一次是编译"编译器"qjsc.exe
,即把js转换成C,甚至是exe的程序,然后用它进行第二次,把repl.js
编译成repl.c
,再编译出qjs.exe
,这是类似python解释器环境的东西,可以用来执行代码。
在Project文件夹打开cmd/powershell窗口,输入xmake
,如果出现"无法识别的命令"之类的话别找我,先配置好xmake再说吧。。正常情况应该是这样:
没有关系,只有qjs.exe
没有编译出来,qjsc.exe
已经有了。
我们进入build/mingw/x86_64/release
目录里,看到qjsc.exe
存在就可以进入下一步了。
第二遍编译
在quickjs文件夹中找到repl.js
,拷到刚才的release目录中,打开进行一些小修改,去掉或用//
注释掉第25行的
js
"use strip";
就是变成下面这样:
//"use strip";
然后在当前目录执行./qjsc -c repl.js
,应该不会报错,然后这个文件夹里应该会多出来一个out.c
的文件。
把这个文件拷回Project文件夹,改名为repl.c
(就是之前删掉那个文件,还记得么)重新执行xmake
。
这回就成功了。回到release文件夹,你就可以用qjs.exe
来执行JavaScript代码了!
效果
顺带提一下,这玩意只能搞UTF-8编码,而中文Windows的cmd是GBK哦~
(写完才发现,还有人也做过教程,也贴上来吧:this)