LuaFileSystem是一个Lua库,用于补充标准Lua发行版提供的与文件系统相关的一组函数。
LuaFileSystem提供了一种可移植的方式来访问底层目录结构和文件属性。LuaFileSystem是免费软件,使用与Lua 5相同的许可证。
下面的办法不使用luarock包管理器安装lfs,而是直接编译lfs成dll文件导入lua使用
lfs源码下载
lfs发布地址:
https://github.com/lunarmodules/luafilesystem
下载后解压,我下载1.6.2版本。在src目录就是他的源码,有三个文件:
头文件lfs.h
源文件lfs.c
模块定义文件lfs.def(用于导出符号)
下载lua库
编译lfs需要使用lua的库
lua5.1的windows版静态库下载地址
https://sourceforge.net/projects/luabinaries/files/5.1.5/Windows%20Libraries/Static/
下载后解压得到文件
│ lua5.1.lib
│
└─include
lauxlib.h
lua.h
lua.hpp
luaconf.h
lualib.h
编译lfs.dll
打开vs2012,新建一个空项目起名lfs。
右键项目,添加,现有项。把lfs.h、lfs.c、lfs.def都添加到项目里。

项目,属性,把项目改为release模式win32,然后在配置属性,常规,配置类型选择动态库(.dll),因为是要生成动态库文件而不是可执行文件

在c/c++,常规,附加包含目录里面,加入lua库的include路径

在链接器,常规,附加库目录里面,填入lua库的目录

在链接器,输入,附加依赖项,填入链接的库,这里是lua5.1.lib静态库文件。
同时在模块定义文件输入lfs.def的完整路径,指定模块定义文件。如果不是完整路径,即使def文件加入了项目,因为不在项目目录下,还是会找不到。

之后保存,选择release模式,win32,编译就会生成lfs.dll,如果提示def文件的version语法错误,那么就打开def文件,改一下version后面的版本,比如1.5.0改成了1.5
LIBRARY lfs.dll
DESCRIPTION "LuaFileSystem"
VERSION 1.5
EXPORTS
luaopen_lfs
检测和使用
可以查看dll是否正确导出符号,打开vs2012开发人员命令行工具,切换到lsf.dll目录,输入dumpbin /exports命令,可以看到导出了_luaopen_lfs符号,这是lua调用c语言模块的入口点
dumpbin /exports lfs.dll
Microsoft (R) COFF/PE Dumper Version 11.00.50727.1
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file lfs.dll
File Type: DLL
Section contains the following exports for lfs.dll
00000000 characteristics
6615783B time date stamp Wed Apr 10 01:17:47 2024
0.00 version
1 ordinal base
1 number of functions
1 number of names
ordinal hint RVA name
1 0 00001F40 luaopen_lfs = _luaopen_lfs
Summary
1000 .data
2000 .rdata
2000 .reloc
1000 .rsrc
A000 .text
之后把生成的lfs.dll文件放到lua的主目录下就可以使用了,引用lfs模块语法
当库文件移植到其他电脑上,如果出现无法导入库的错误,可能需要安装VS2012运行库,因为是用VS2012进行编译的。