Windows系统下配置LuaBinaries文件的常见疑问
问题1:静态库与动态库的区别
- 静态库:编译链接阶段会把Lua的全部核心代码直接整合进你的最终可执行文件中,生成的程序可以独立运行,不需要额外附带Lua相关的库文件。缺点是如果有多个程序都嵌入了Lua,每个程序都会保留一份Lua代码副本,总占用空间更大,后续需要升级Lua版本时必须重新编译你的整个程序。
- 动态库:编译链接阶段只会把调用动态库的接口信息整合进你的程序,运行时需要同版本的
lua*.dll放在程序可读取的路径下才能正常启动。优点是多个程序可以共享同一份dll文件,节省磁盘和内存空间,升级Lua版本时只要替换对应dll、且接口兼容的前提下,无需重新编译你的程序。
问题2:两份同名lua*.dll的选用规则
*同版本、同架构(都是64位/都是32位)*的前提下,两份dll的核心内容是一致的,差异仅在适用场景:
- 二进制包
lua-*_Win*_bin.zip里的dll是为包内的lua.exe(Lua交互式解释器)、luac.exe(Lua编译器)提供运行时支持的 - 动态库包
lua-*_Win*_*_lib.zip里的dll会配套提供对应的导入库文件、C头文件,专门用于你自己开发嵌入Lua、或编写Lua扩展模块的场景,开发时优先选用库包内的dll,可以避免头文件、导入库和dll版本不匹配的问题。
问题3:liblua*.a是不是命名错误的lua*.lib
不是命名错误,二者是适配不同编译工具链的库文件,格式互不通用:
liblua*.a是MinGW/GCC工具链使用的静态库格式,不能直接用于Visual Studio的MSVC编译环境lua*.lib是MSVC工具链使用的静态库/动态库导入库格式,不能直接用于MinGW编译环境
旧版本的LuaBinaries会同时提供适配两种编译工具链的库文件,所以你会在旧版库包中看到liblua*.a文件,属于正常的官方产物。
内容的提问来源于stack exchange,提问作者what the
相关产品推荐
相关产品推荐

