MinGW环境下通过Makefile编译Lua 5.1.5出现ld找不到文件错误
故障原因
链接阶段报找不到#、DLL、needs这类文件,是因为Makefile里的注释内容被错误当成链接输入文件传给了ld。
从错误日志里的gcc执行命令可以看到,命令末尾多了# DLL needs all object files这段内容——这本来是Lua 5.1.5源码src/Makefile中写的代码注释,正常POSIX兼容的make工具会自动忽略#开头的注释内容,但你当前用的是Chocolatey安装的Windows原生版make,对Makefile语法解析存在兼容缺陷,没有过滤这段注释,直接把注释拆成多个文件名传给链接器,才触发了找不到文件的报错。
修复方案
任选一种操作即可解决问题:
- 直接修改
src/Makefile,找到链接生成lua51.dll的规则行,删掉行尾的# DLL needs all object files注释内容,保存后重新执行make mingw即可正常编译,这个方法操作最快,不需要调整现有环境配置。 - 替换当前调用的make程序,改用MSYS2环境自带的make(路径一般为
C:/msys64/usr/bin/make.exe或MinGW64对应目录下的make),这类适配POSIX标准的make可以正确识别Makefile注释,不会把注释内容传给编译器。 - 不要直接在PowerShell里调用Chocolatey安装的make,先打开MSYS2的MinGW64终端,进入源码目录后再执行
make mingw命令,也能避开语法兼容问题。
内容的提问来源于stack exchange,提问作者dydy
相关产品推荐
相关产品推荐

