[QJS xmake] 非常简单地在Windows下编译QuickJS!

文章目录

前言

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)

相关推荐
码艺-Alimjan21 分钟前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
怎么没有名字注册了啊41 分钟前
Windows Server 2008 R2 如何开启Aero
windows
可乐鸡翅yeah_1 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
yivifu2 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub
山下梅子酒2252 小时前
洛谷-入门-B2079
c语言
lingchen19062 小时前
Windows CMD 的 `cd`(change directory,切换目录)命令
windows·命令模式
weixin_448290253 小时前
书庐开发实战教学
javascript·css·html
默_笙3 小时前
🛴 从散件到整机:DeepAgents 与 Agent 身上预留的那些"插槽"(前置介绍)
前端·javascript
一木 之林3 小时前
DeepSeek Agent 开发(一)
开发语言·前端·javascript
Mr_Macallon3 小时前
C++回顾(基础)(01)
c语言·开发语言·c++·学习