1.Unity开发:tolua升级Lua5.3后编译打包指南
2.Windows平台下QuickJS开发及相应C版DLL Module制作简介
3.如何在Window系统安装Luarocks(踩坑篇)
4.Ubuntu 20.04 GCC,译l源码c源译Cmake,vcpkg, Clang,CLion,VSCode,Vulkan,Luajit2环境
5.luadec软件ä¸è½½ï¼
6.lua的API_lua的api在哪
Unity开发:tolua升级Lua5.3后编译打包指南
一、源起
老项目使用tolua,教程因新增需求支持int,码编升级至lua5.3。译l源码c源译打包过程中遇到多平台问题,教程特别关注了Android和Mac平台。码编晚风4.3交易猫源码文章旨在整理打包过程中遇到的译l源码c源译坑点,以及不同平台打包时的教程环境配置和关键资源。
打包环境采用msys2,码编模拟Linux环境,译l源码c源译使用.sh脚本完成打包流程。教程重点关注msys2版本调整,码编需使用android ndk re版本进行编译。译l源码c源译
二、教程打包环境安装
1、码编msys2安装与环境配置
下载msys2,选择对应系统版本进行安装。安装完成后在msys文件夹中找到mingw.exe和mingw.exe,它们分别用于处理位和位库编译。需注意不同位数的库会自动放置在相应的文件夹中。安装gcc和make使用pacman指令进行,君安支付源码确保所有依赖包均已安装。
三、各平台打包
1、Windows DLL
使用vs项目直接编译,或通过.sh文件和makefile进行编译配置。确保makefile设置正确,必要时可调整文件内容。
2、Android arm和arm
依赖jni/Android.mk文件进行编译,生成的文件主要位于obj文件夹内。编译脚本需cd至jni目录下执行,确保mk文件中的目录与文件路径正确。
3、iOS
通过xcodeproj文件进行编译。对于mac用户,需注意以下坑点:
I、 修改Loslib.c和Pbc-lua.c文件,确保代码兼容。
II、 遇到Xcode路径错误时,任务推广源码使用指定路径调用xcodebuild命令。
III、 .bash_profile文件配置确保环境变量正确设置。
IV、 处理文件系统不兼容问题,确保.sh文件在mac下正确编译。
V、 避免使用svn管理build文件夹,防止关键文件被意外删除。
Windows平台下QuickJS开发及相应C版DLL Module制作简介
QuickJS是一个小型且可嵌入的JavaScript引擎,由Fabrice Bellard和Charlie Gordon共同创建。它支持ES规范,包含模块、异步生成器、代理和BigInt等功能。可选数学扩展如大十进制浮点数、大二进制浮点数和运算符重载。最新版为quickjs---。在Linux平台下安装很容易,但在Windows平台上安装却较为困难。个人介绍源码
在Windows平台上制作qjs和qjsc可执行文件,可通过使用mingw在Win 和Win XP系统上安装成功。GitHub上有基于Visual Studio和MSYS2的实现,但都只实现了qjs.exe,无法实现qjsc.exe的功能,因此无法编译js源码或利用quickjs的高级功能。借助gcc,可以将qjsc生成的C代码制作成可执行文件,完美模拟了Linux平台下的基础功能。
在Windows平台下,可利用mingw实现制作C语言的dll版的Modules。虽然原始源代码在Windows下并未实现,但通过自己实现,可在examples目录下的fib.c文件中找到demo。使用gcc在Windows平台下制作fib.dll动态链接库,然后QuickJS将其当作模块进行调用。生成的dll文件与Linux平台下的fib.so文件功能相同,但输出内容稍有不同,方便查看。
在Windows平台上使用qjsc反编译调用dll的阿姨帮源码js脚本,第一种写法能够完美通过,但第二种写法报错,因为dll不是quickjs的系统关键字。生成的test_fib.c文件形式与之前相同,使用gcc可以运行可执行文件,输出效果与js版相同,计算时间也一致。
对于性能测评,利用examples目录下的fibonacci计算函数,测试了各个版本(含nodejs)的fib()的计算时间。Dll版qjs计算性能比nodejs提升了.5%,而普通js版的qjs则较为缓慢。QuickJS的计算性能大致处于脚本语言中等水平,比Python强,但比Lua慢。
对于Windows平台下的QuickJS开发及相应C版DLL Module制作,借助mingw与Linux平台的实现基本相同。然而,使用Visual Studio可能无法实现,因为代码量修改太大。在Windows平台下,通过制作dll模块可提升QuickJS的性能。如果需要此功能,欢迎联系提供包含Windows平台下制作qjs.exe和qjsc.exe的quickjs源码和可执行文件的资源,以及提供mingw和cmake,以及简单的使用说明。通过这些资源,可以学习gcc的使用方法、cmake制作大型软件的方法、QuickJS和C的互操作方法、动态链接库模块的使用、对C语言的深刻理解以及对JS语言的深刻理解。
如何在Window系统安装Luarocks(踩坑篇)
了解Luarocks,Lua的软件包管理器,为Lua编程语言用户提供了安装和管理模块的便捷方式。Luarocks相当于Python的pip,允许用户从中央存储库、本地文件或URL安装Lua模块。模块集成为Lua扩展,增强其功能。Luarocks还能协助管理模块间的依赖关系,确保所有必需模块自动安装。
若要安装Luarocks,首先需准备安装包和第三方工具。推荐使用Mingw作为编译环境,避免安装错误版本导致的编译问题。下载Mingw后,解压并放置在个人偏好位置,将可执行文件添加至环境变量中。通过命令行运行gcc --version,确认环境配置成功。
接着,下载Lua源码并解压,新建build.cmd文件,输入编译指令。双击执行,待编译完成,即可在build文件夹中找到Lua执行文件。
下载Luarocks源码并解压,使用提供的编译指令在命令行中执行。配置环境变量后,便能轻松安装Lua的第三方库。
安装第三方Lua库时,可能遇到编译问题,如找不到md5对比工具,需要安装OpenSSL解决。在命令行输入lua命令后,可能会遇到找不到.dll文件的情况,可通过以下两种方法解决,确保顺利使用第三方库。
Luarocks简化了Lua开发者的软件包管理,提供了一种高效、便捷的方式扩展Lua功能,助力开发者更轻松地开发Lua应用程序。
Ubuntu . GCC,Cmake,vcpkg, Clang,CLion,VSCode,Vulkan,Luajit2环境
本文详述了在Ubuntu .系统上配置游戏引擎开发环境的过程,重点关注GCC 、Clang 、CMake 3..0、Vulkan SDK、CLion工具链以及特定库的使用注意事项。虽然Ubuntu .的GCC版本最高为,不完全支持C++,但可以通过特定方法升级到GCC 。
对于Clang,Ubuntu默认的版本较旧,推荐使用Clang 。安装方法涉及LLVM Debian/Ubuntu packages,同时需要注意C++相关bug,使用Clang 及以下版本可能会引发问题。
CMake Tools在Linux上使用CMake 3..0版本,以确保与新版本的兼容性。Vulkan SDK从vulkan.lunarg.com获取,而Conda Lib Update则需要针对可能的libc++链接错误进行更新。
CLion中,需配合cmake3.和clang进行Cmake ToolChain配置,并启用Clang-format的file watcher插件。同时,项目中使用Boost库时需要注意内存越界和内存池问题,建议优先使用std regex以避免潜在问题。
在libudev-dev的安装过程中,Ubuntu .的依赖包版本与实际安装包有冲突,需要手动下载更高版本的libudev-dev来解决。
最后,文章提及了LuaJit2和Sol2的集成,包括安装方法、Lua/C模块的动态加载以及CTest的并行执行bug的处理。通过修改vcpkg的port文件,可以确保正确加载C模块并解决相关问题。
luadec软件ä¸è½½ï¼
对äº*.luaæ件,éè¦ç¨ä»ä¹è½¯ä»¶ç¨åºæå¼
1ãå¦ææ¯æ¥ççè¯ï¼å¯ä»¥å®è£ ä¸äºç¬¬ä¸æ¹çè®°äºæ¬è½¯ä»¶ï¼ç¶åç¨ä»ä»¬æå¼luaæ件è¿è¡æ¥çãæè ç´æ¥ä¿®æ¹åç¼å为ææ¬ææ¡£æ ¼å¼ï¼ä½¿ç¨è®°äºæ¬æå¼ã
2ã以å°ç±³max2为ä¾ï¼å®åææºæå¼luaæ件æ¹æ³å¦ä¸ï¼é¦å å¯ä»¥å°å®ç½ä¸è½½ä¸ä¸ªGGï¼ä¸è½½ä¹åè¯è¨è®¾ç½®ä¸å³å¯ï¼è®°ä½è¿éä¸å®è¦æ¯å¨å®ç½ä¸è½½çï¼ä¸è½½ä¹åä¼å®è£ 两个çæ¬ï¼ä¸ä¸ªæ¯ç¡¬ä»¶å éï¼ä¸ä¸ªæ¯è½¯ä»¶å éï¼ä¸¤ä¸ªé½å¯ä»¥ä½¿ç¨ã
3ãé¦å æ£æ¥èªå·±Windowä¸æ没æå®è£ Luaï¼å¦æ没æçè¯/luabuilds/å»ä¸è½½ä½ æ³è¦çé£ä¸ªçæ¬ãä¸è½½ä¸æ¥åæ éå®è£ ï¼ç´æ¥é ç¯å¢åéã
4ãæå¼luaæ件使ç¨ä¸è¬çææ¬ç¼è¾å·¥å ·å°±å¯ä»¥æå¼åç¼è¾äºï¼linuxä¸ä½¿ç¨èªå¸¦çvimç¼è¾å¨ï¼windowsä¸ä½¿ç¨èªå¸¦çè®°äºæ¬å°±å¯ä»¥ã使ç¨è¦ä½¿ç¨luaæ件ï¼å¿ é¡»è¦å®è£ ä¸ä¸ªluaç解æå¨ã
5ãè¿æ¯luaèæ¬è¯è¨ç¼å¶çï¼å¯ä»¥ä¸è½½luaforwindowsè¿ä¸ªè½¯ä»¶ç¶åç¨ç¨åºæå¼è¿ä¸ª.luaæ件ã
6ãè¿ä¸ªå¾ç®å~~è¦çLuaå·ï¼æ¯1çè¯ï¼é£ä½ å¯ä»¥ä¸Luadecæ¥åç¼è¯ãä»å¹¶æ²¡æå å¯ï¼é£æ¯Luaåèç ç¨luacå å¯è¿äºï¼å¯ä»¥dofileçæ ¼å¼è°ç¨è¿è¡ï¼ç¶åä¿®æ¹æ°å¼ä¿åæ¿æ¢ã
luaèæ¬è¢«luacç¼è¯ä¹å,å¦ä½åç¼è¯æè åæ±æ åçluaæâCFLuaDCâå·¥å ·å¯ä»¥åç¼è¯ãæ åçlua5æâDisLuaâãâluadecâä¸¤ä¸ªå·¥å ·å¯ä¾éç¨ãï¼ï¼ï¼ä»¥ä¸ä¸ä¸ªå·¥å ·å¨ç½ä¸å¯æç´¢ä¸è½½ãluajitç¼è¯çluacæ件å°æ åç¼è¯å·¥å ·ã
è·è¸ªï¼è±å£³ï¼è§£å ï¼è§£å¯ï¼è·å¾luac追luaL_loadbufferluaL_loadfilelua_loadåºè¯¥å¯ä»¥æ¾å°è§£å¯å½æ°ãhookè¿3个å½æ°ï¼å¯¼åºè§£å¯åçæ°æ®ï¼ç´æ¥å°±æ¯luacæ件ãå¦æ没ç¼è¯çè³æ¯luaæºæ件ã
对äºä½¿ç¨åççluaæçæçèæ¬ï¼é½æç¸åºçåç¼è¯å¨ï¼ä½ è±ç¹å夫æç´¢ï¼ç½ä¸ä¸å®è½æ¾å°çã
å ·ä½æå¼æ¥éª¤å¦ä¸ï¼æä»¶æ ¼å¼åç¼å以*.luaæ ¼å¼åå¨ãç¶åæ们å¨æ¡é¢å®è£ 并åå»æå¼æ¥çå·¥å ·ãç¶åæ们æå¼æ¥çå·¥å ·ç¹å»æ件éæ©æå¼ãç¶åæ们éæ©luaæ件ç¹å»æå¼ãç¶åæ们æå¼åæ¥çæ件å 容ï¼å¹¶å¯ä»¥ç¼è¾ã
è¿ä¸ªå¾ç®å~~è¦çLuaå·ï¼æ¯1çè¯ï¼é£ä½ å¯ä»¥ä¸Luadecæ¥åç¼è¯ãä»å¹¶æ²¡æå å¯ï¼é£æ¯Luaåèç ç¨luacå å¯è¿äºï¼å¯ä»¥dofileçæ ¼å¼è°ç¨è¿è¡ï¼ç¶åä¿®æ¹æ°å¼ä¿åæ¿æ¢ã
lua5.1åluadec0.6è¿è¡é®é¢1ãè¿ä¸ªå¾ç®å~~è¦çLuaå·ï¼æ¯1çè¯ï¼é£ä½ å¯ä»¥ä¸Luadecæ¥åç¼è¯ãä»å¹¶æ²¡æå å¯ï¼é£æ¯Luaåèç ç¨luacå å¯è¿äºï¼å¯ä»¥dofileçæ ¼å¼è°ç¨è¿è¡ï¼ç¶åä¿®æ¹æ°å¼ä¿åæ¿æ¢ã
2ãæ¯çï¼è¿åºè¯¥æ¯å·²ç»ç¼è¯è¿çLUAç¨åºï¼æ¯äºè¿å¶ä»£ç ï¼ä¸æ¯ææ¬ï¼æ以æå¼ä¹åæ¯ä¹±ç ãé¤éä½ æ¾åä½è 请æ±ä»æä¾æºä»£ç ï¼ä¸ç¶åºæ¬ä¸æ 解ã
3ãè¿ä¸ªæ¯baseç¼ç è¿çï¼base解ç ä¸ä¸å°±å¥½äºã
luacèæ¬æä¹ç¼è¾æå¼å¶ä½1ãå¨å°åä¸æå³é®ï¼éæ©éæµè§ç¸å ³å ååºåå°ãæå¼éå åæµè§å¨å°ï¼å¨çªå£ä¸æ¹å°±æ¯è¯¥å°åæå¨çå åæ°å¼ï¼å ¶å®çå åæ°å¼ä¹å¨è¿éãåå»å°±å¯ä»¥ç¼è¾ãå¯æ¯ä¿®æ¹å没ææ示ï¼ä¸å©äºæ¥çã
2ã第ä¸æ¥ï¼æ°å»ºèæ¬ï¼è¿å ¥èæ¬ç¼è¾å¨ç¹å»ä¸æ¹å·¥å ·æ çæ°å»ºæé®ï¼å°±å¯ä»¥æ°å»ºä¸ä¸ªèæ¬ã
3ãåéè¡¨æ ¼å¼ï¼æ¯è¾çµæ´»çèæ¬ç±»åï¼éç¨èå´å¹¿ï¼è¿éæä¹åäºä¸ä¸ªç®åçæ ·å¼ä½ä¸ºåèãæä¸åçç»é¢éè¦å±ç¤ºçå 容ï¼æç §å§æ åå±ä¾æ¬¡æå好ï¼å¹¶ä¸æ³¨ææ¯ä¸ªç»é¢çç»èã
4ãè¿è¡æé®ç²¾çµãå¨ä¸»çé¢ä¸ç¹éâæ°å»ºâè¿å ¥èæ¬ç¼è¾å¨çé¢å·¦è¾¹çå½ä»¤ç±»åééæ©é¼ æ å½ä»¤ã常ç¨çå°±æ¯å2个ãå设游æä¸äººç©ä¸ºä¸å¿åæ ï¼ãææ¯æ¬¡éåæªç©åéç¹éè§è²èªå·±ã
5ãæé®ç²¾çµï¼æé®ç²¾çµæ¯ä¸æ¬¾æ¨¡æé¼ æ é®çå¨ä½ç软件ãéè¿å¶ä½èæ¬ï¼å¯ä»¥è®©æé®ç²¾çµä»£æ¿åæï¼èªå¨æ§è¡ä¸ç³»åé¼ æ é®çå¨ä½ãæé®ç²¾çµç®åæç¨ï¼ä¸éè¦ä»»ä½ç¼ç¨ç¥è¯å°±å¯ä»¥ä½åºåè½å¼ºå¤§çèæ¬ã
luaappæä¹ä¸è½½luaå®ç½ãstandæ¯æ¬¾ååçé¨ç大éæ游ææ¹ç¼ç§»æ¤èæ¥ççåå°å»ç±»æ游ï¼è¯¥æ¸¸æä¸çluaéè¦å»luaå®ç½ä¸è½½ï¼å®è£ ä¹åå¦æçµèæ¡é¢çå¿«æ·é®ä¸è½æå¼ï¼å°±å»æ ¹ç®å½æ¾å°.exeå¯æ§è¡æ件å³å¯æå¼ã
Gtaå°å©æuaèæ¬ï¼ä½ å¯ä»¥å¨3DM游æç½ä¸ä¸è½½ï¼æè æ¯ç´æ¥æ游æçä¸ä¸è½½ï¼æå¨ç¾åº¦ä¸æç´¢ï¼æ¾å¨æçç¾åº¦ç½çä¸ï¼ä¹å¯ä»¥ä¸è½½luaèæ¬ã
ç½ç«ä¸è½½LUAå httpï¼//ï¼ctrl+F2è¾å ¥gnome-terminalæå¼ç»ç«¯ä¸è½½ubuntuçç¼è¯æ¯æsudoapt-getinstallbuild-essential注æï¼è¿éä¸ä» ä» æ¯å®è£ gccèå·²ï¼è¿å æ¬å¾å¤å ¶ä»å·¥å ·ã
é¦å è¦ä»â设置âéé¢ï¼æWiFiï¼æ 线å±åç½ï¼å ³æãç¶åå¼å¯ç§»å¨äºèç½âï¼è®©ææºè¿è¡ç§»å¨ç½ç»ï¼ç¶ååæå¼âAPPâæ¾åºæ¥èªå·±æ³è¦æ´æ°ç软件ã
luaæ件éè¦éè¿ç¬¬ä¸æ¹è½¯ä»¶æå¼ï¼å å°ç½ç«ä¸è½½ä¸ä¸ªGGæ件ï¼ä¸è½½åå®è£ 两个çæ¬ï¼ç¡¬ä»¶å éï¼è½¯ä»¶å éï¼ç¶åç¡®å®ææºå·²ç»è¢«rootï¼å¹¶è·å¾GGæéãå®æéå è¿ç¨åï¼ç¹å»æç´¢ï¼ç¶åä¾æ¬¡ç¹å»ä¸è§ç¬¦å·ã
lua的API_lua的api在哪
一:定义:
C API是一个C代码与Lua进行交互的函数集。他有以下部分组成:读写Lua全局变量的函数,调用Lua函数的
函数,运行Lua代码片断的函数,注册C函数然后可以在Lua中被调用的函数,等等。
二:堆栈解析
1. 理解lua的栈到底是什么?
lua的栈类似于以下的定义, 它是在创建lua_State的时候创建的
TValue stack[max_stack_len] // 欲知内情可以查 lstate.c 的stack_init函数
lua的栈中压入的类型有数值,字符串,表,闭包。但是最后都是统一用TValue这种数据结构来保存的:
struct TValue { Value value;//存储的值int tt;//存储的类型};union Value { GCObject *gcc;//诸如table, thread, closure, string需要内存管理垃圾回收的类型都存在这里void *p;// 可以存一个指针, 实际上是lua中的light userdata结构lua_Number n;//所有的数值存在这里, 不过是int , 还是floatint b;// Boolean值存在这里, 注意, b只存布尔};union GCObject { GCheader gch;union TString ts;union Udata u;union Closure cl;struct Table h;struct Proto p;struct UpVal uv;struct lua_State th;};