Windows下Cygwin+MinGW-w64编译嵌入Lua的C库链接错误求助
解决MinGW-w64链接Cygwin Lua库失败的问题
问题根源
你安装的Cygwin版Lua库是针对Cygwin运行环境编译的,和MinGW-w64的编译目标(原生Windows程序)采用的ABI(应用二进制接口)不兼容,跨环境直接链接必然失败;同时你使用的链接参数格式也不正确。
可行解决方法
方法1:安装MinGW-w64适配版Lua包
放弃Cygwin的Lua包,改用MSYS2环境下的MinGW专属Lua包,步骤如下:
- 打开MSYS2的ucrt64终端(对应你配置的工具链环境)
- 执行以下命令安装MinGW版Lua及开发文件:
pacman -S mingw-w64-ucrt-x86_64-lua mingw-w64-ucrt-x86_64-lua-dev - 编译你的程序时直接使用:
此时链接器会自动找到适配MinGW的Lua库,无需额外指定路径。cc doscript.c -o doscript -llua
方法2:手动编译Lua源码适配MinGW-w64
如果需要指定Lua版本,可手动编译源码:
- 下载Lua 5.3.6官方源码包并解压到本地目录
- 打开MSYS2的ucrt64终端,进入源码目录,执行编译命令:
make mingw - 编译完成后,源码目录会生成
liblua53.a(静态库)和lua53.dll(动态库),以及所需头文件 - 编译你的程序时指定头文件和库路径:
替换cc doscript.c -o doscript -I/path/to/lua/src -L/path/to/lua/src -llua53/path/to/lua/src为你的Lua源码实际路径。
方法3:强制链接Cygwin Lua库(不推荐)
若你接受程序依赖Cygwin DLL运行,可修正链接参数:
链接器识别库名时会自动添加lib前缀和.a/.dll.a后缀,因此正确的链接命令应为:
cc doscript.c -o doscript -L/usr/lib -llua-5.3
但此方法编译出的程序必须在Cygwin环境或携带Cygwin相关DLL才能运行,不符合原生Windows程序的需求,仅作临时测试用。
内容的提问来源于stack exchange,提问作者ThangNguyen
相关产品推荐
相关产品推荐

