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

news2024/11/15 11:28:33

文章目录

  • 前言
  • 准备
    • C编译器
    • xmake
    • 编译包
  • 工程准备
  • 修改版本号
  • 第一遍编译
  • 第二遍编译
  • 效果

前言

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行,把

add_defines("CONFIG_VERSION=\"2020-11-08\"")

改成

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行的

"use strip";
就是变成下面这样:
//"use strip";

然后在当前目录执行./qjsc -c repl.js,应该不会报错,然后这个文件夹里应该会多出来一个out.c的文件。

把这个文件拷回Project文件夹,改名为repl.c(就是之前删掉那个文件,还记得么)重新执行xmake
成功这回就成功了。回到release文件夹,你就可以用qjs.exe来执行JavaScript代码了!

效果

效果顺带提一下,这玩意只能搞UTF-8编码,而中文Windows的cmd是GBK哦~

(写完才发现,还有人也做过教程,也贴上来吧:this)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1528353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32CubeIDE基础学习-LED闪烁实验

STM32CubeIDE基础学习-LED闪烁实验 文章目录 STM32CubeIDE基础学习-LED闪烁实验前言第1章 硬件介绍第2章 新建工程2.1 基础工程配置部分2.2 工程外设配置部分2.3 生成工程代码部分2.4 输出HEX文件、编译下载 第3章 代码编写3.1 方式1:IO翻转3.2 方式2:调…

“西安大重澳生物科技有限公司”——甄选优质企业品牌入围央媒

西安大重澳生物科技有限公司,一家专注于生物科技研发的企业,自2017年成立以来,致力于开发革命性的肤用肽制剂产品。近日,成功入围央视新媒体直播盛典。在持续的创新与努力下,畅夫泰R畅肤肽品牌已成为备受瞩目的名副其实…

园区配电监测信息系统

园区配电监测信息系统是一款集成了高科技、数据分析和管理的系统,旨在实时监测和控制园区内的电力供应,提高电力使用效率,减少能源浪费,确保电力安全。该系统通过现代通信技术、自动控制技术和计算机技术,实现对园区配…

码云简化版使用教程

码云简化版使用教程 ①创建本地项目 ②在本地项目根目录下创建git相关目录及文件 ③在码云上创建新的仓库 ④在本地项目中配置仓库地址,提交项目内容 下面直接从第二步开始讲解 在本地项目根目录下创建git相关目录及文件 1、打开项目根目录,进入cmd界…

Huggingface 笔记:大模型(Gemma2B,Gemma 7B)部署+基本使用

1 部署 1.1 申请权限 在huggingface的gemma界面,点击“term”以申请gemma访问权限 https://huggingface.co/google/gemma-7b 然后接受条款 1.2 添加hugging对应的token 如果直接用gemma提供的代码,会出现如下问题: from transformers i…

邮箱验证码api接口申请流程?有哪些条件?

邮箱验证码API服务如何选择?怎么正确设置邮箱验证码? 邮箱验证码API接口在保障用户账号安全、提高用户体验方面发挥着至关重要的作用。AokSend将详细介绍邮箱验证码API接口的申请流程,帮助您顺利集成这一功能,增强应用的安全性。…

【ADF4351】使用FPGA进行SPI寄存器配置、使用FPGA计算各个频率的频点,ADF4351配置程序

简介 特性 输出频率范围:35 MHz至4,400 MHz 小数N分频频率合成器和整数N分频频率合成器 具有低相位噪声的VCO 可编程的1/2/4/8/16/32/64分频输出 典型抖动:0.3 ps rms EVM(典型值,2.1 GHz): 0.4% 电源:3.0 V至3.6 V …

基于spring boot框架的发艺美发店管理系统

摘 要 系统根据现有的管理模块进行开发和扩展,采用面向对象的开发的思想和结构化的开发方法对发艺美发店管理的现状进行系统调查。采用结构化的分析设计,该方法要求结合一定的图表,在模块化的基础上进行系统的开发工作。在设计中采用“自下而…

算法详解——选择排序和冒泡排序

一、选择排序 选择排序算法的执行过程是这样的:首先,算法遍历整个列表以确定最小的元素,接着,这个最小的元素被置换到列表的开头,确保它被放置在其应有的有序位置上。接下来,从列表的第二个元素开始&#x…

Java进阶 Maven基础

资料格式 配置文件 com.itheima Java代码 Statement stat con.createStatement(); 示例 com.itheima 命令 mvn test - Maven简介 传统项目管理状态分析 Maven 是什么 Maven的本质是一个项目管理工具,将项目开发过程抽象成一个项目对象模型(POM&…

如何使用phpStudy在Windows系统部署静态站点并实现无公网IP远程访问

文章目录 使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点,测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中,查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2.2 映…

文献速递:深度学习乳腺癌诊断---使用深度学习改善乳腺癌组织学分级

Title 题目 Improved breast cancer histological grading using deep learning 使用深度学习改善乳腺癌组织学分级 01 文献速递介绍 乳腺癌组织学分级是乳腺癌中一个确立的临床变量,它包括来自三个方面的信息,即小管形成程度、核多态性和有丝分裂计…

java数据结构与算法刷题-----LeetCode1005. K 次取反后最大化的数组和(这就不是简单题)

java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完):https://blog.csdn.net/grd_java/article/details/123063846 卷来卷去,把简单题都卷成中等题了 文章目录 1. 排序后从小到大…

免费录屏软件无水印推荐,录制视频更轻松(3款)

随着互联网技术的快速发展,录制屏幕成为人们日常生活中日益重要的需求。无论是制作教学视频、直播分享,还是录制游戏过程,一款好用且免费的录屏软件都是不可或缺的。然而,许多录屏软件在录制过程中会添加水印,影响了录…

电脑如何直接压缩图片?这几个方法帮你解决

在许多社交媒体平台上,上传照片时经常需要进行大小调整,这是因为较大的照片文件可能会占用更多的存储空间,并且在传输过程中需要更长的时间。通过图片压缩可以减小文件大小,提高上传速度,并节省存储空间,那…

大学老师不会告诉你的网安证书?

前言 在大学中,有很多安全专业的师傅们,一直有问: “计算机xxx级有用吗?” “软考初级有用吗?” “xxx资格证有用吗?” 甚至有一些来讲这些整数的,以“我们这个专业以后就业需要的证书....…

SpringCloud-注册中心

一、注册中心简介 1、服务治理 服务治理中的三个角色: 服务提供者:负责提供服务的实现和运行。服务提供者将服务注册到服务注册中心,并根据需要处理来自消费者的请求。(暴露服务接口,供其他服务调用)。 …

【Python】flask框架请求体数据,文件上传,请求头信息获取方式案例汇总

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

新媒体代运营是什么意思?CloudNEO:新媒体代运营的领先之选

新媒体代运营是什么意思? 随着互联网的迅速发展和普及,新媒体已经成为了企业推广和营销的重要工具。在这个背景下,新媒体代运营应运而生,成为了企业实现品牌曝光、粉丝增长和内容传播的重要方式。那么,新媒体代运营到…

经纬恒润推出新一代快速控制原型产品 ControlBase_S

近年来,软件定义汽车的发展趋势在行业内已经达成共识,与此同时,产品越来越复杂,开发周期越来越短,给软件开发带来了极大的挑战。在软硬件解耦的背景下,如何提前进行软件架构、算法开发及验证,成…