在C++程序中嵌入quickjs实现C++和Javascript互相调用
1、在主程序中运行时,需要确保sample.js和main.js文件位于执行目录,以便于quickjs引擎能够正确加载和执行这些文件。构建和运行程序:使用CMake构建项目,确保所有依赖项和库都正确链接。运行构建后的程序,观察C++和javascript之间的互相调用是否成功。
2、在C++程序中嵌入quickjs,可以构建一个强大的交互平台,让C++和javascript代码无缝协作。quickjs-ng作为快速的C++实现的javascript引擎,它支持跨平台应用,包括Linux和Windows。下面通过一个示例代码来展示如何在C++项目中集成quickjs,实现两种语言的双向通信。
3、JavaScript也能像Lua一样,通过QuickJS实现作为脚本嵌入C++,创造出类似Lua的“热更新”功能。QuickJS让JavaScript拥有了Lua式的嵌入能力,尤其在C++程序中实现JavaScript运行时库,使得两者混合运行变得轻而易举。
如何在Windows编译和使用QuickJS
1、进行QuickJS的编译时,使用MSys2内的Make工具,或手动修改Makefile以启用Windows支持。确保将生成的动态库与QuickJS可执行文件放置在同一目录下,以便于运行时调用。此步骤涉及复制ucrt目录下的bin文件至适当位置。
2、在Windows平台下,可利用mingw64制作C语言的DLL版Modules。可在examples目录下的fib.c文件中找到demo,使用gcc制作fib.dll动态链接库。QuickJS可将生成的dll文件当作模块进行调用,与Linux平台下的.so文件功能相同。
3、在Windows平台上使用qjsc反编译调用dll的js脚本,第一种写法能够完美通过,但第二种写法报错,因为dll不是quickjs的系统关键字。生成的test_fib.c文件形式与之前相同,使用gcc可以运行可执行文件,输出效果与js版相同,计算时间也一致。
4、首先,从Windows平台出发,静态链接版本的qjs.exe和qjsc.exe曾达到3M,但通过动态链接库的转换,生成的dll大小减小到3M,对应的exe文件瘦身至59K,显示了明显的体积优势。在Linux环境下,动态链接库版生成了接近4M的so库,以及小于50K的可执行文件。
Windows和Linux平台动态链接库版QuickJS制作
首先,从Windows平台出发,静态链接版本的qjs.exe和qjsc.exe曾达到3M,但通过动态链接库的转换,生成的dll大小减小到3M,对应的exe文件瘦身至59K,显示了明显的体积优势。在Linux环境下,动态链接库版生成了接近4M的so库,以及小于50K的可执行文件。
在Windows平台下,可利用mingw64制作C语言的dll版Modules。可在examples目录下的fib.c文件中找到demo,使用gcc制作fib.dll动态链接库。QuickJS可将生成的dll文件当作模块进行调用,与Linux平台下的.so文件功能相同。
在Windows环境下,使用QuickJS进行编译和应用时可能会遇到一些挑战。与Linux或Mac系统相比,Windows环境下的QuickJS编译并非直接支持,且不支持动态链接库(DLL)的加载。然而,通过在MSYS2平台上进行一系列的步骤,可以成功解决这些问题并实现QuickJS在Windows环境下的有效使用。首先,安装MSYS2是整个流程的起点。
使用gcc在Windows平台下制作fib.dll动态链接库,然后QuickJS将其当作模块进行调用。生成的dll文件与Linux平台下的fib.so文件功能相同,但输出内容稍有不同,方便查看。在Windows平台上使用qjsc反编译调用dll的js脚本,第一种写法能够完美通过,但第二种写法报错,因为dll不是quickjs的系统关键字。