You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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包,步骤如下:

  1. 打开MSYS2的ucrt64终端(对应你配置的工具链环境)
  2. 执行以下命令安装MinGW版Lua及开发文件:
    pacman -S mingw-w64-ucrt-x86_64-lua mingw-w64-ucrt-x86_64-lua-dev
    
  3. 编译你的程序时直接使用:
    cc doscript.c -o doscript -llua
    
    此时链接器会自动找到适配MinGW的Lua库,无需额外指定路径。

方法2:手动编译Lua源码适配MinGW-w64

如果需要指定Lua版本,可手动编译源码:

  1. 下载Lua 5.3.6官方源码包并解压到本地目录
  2. 打开MSYS2的ucrt64终端,进入源码目录,执行编译命令:
    make mingw
    
  3. 编译完成后,源码目录会生成liblua53.a(静态库)和lua53.dll(动态库),以及所需头文件
  4. 编译你的程序时指定头文件和库路径:
    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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 01:08:36