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

Windows64位Lua5.4加载自制DLL报错:指定模块未找到

Windows下Lua 5.4自定义DLL模块加载失败的解决方法

我在64位Windows系统中开发Lua 5.4可调用的DLL模块,使用Visual Studio编写了简单的C++ DLL后,执行require('testlib')时出现错误:

error loading module 'testlib' from file 'C:\lua\testlib.dll': The specified module could not be found

无论是命令行运行Lua脚本,还是嵌入式调用场景,都会触发该报错。曾怀疑是C++ DLL的特性导致问题,改用C语言编写等效代码后,报错情况完全一致。

问题根源与解决方式

最终排查发现,问题源于自定义DLL缺少lua.dll依赖,可通过以下两种方式解决:

  • 将Lua的lua.dll复制到自定义模块DLL所在目录,即可正常加载模块
  • 采用静态链接方式,将Lua依赖打包进自定义DLL,避免依赖外部文件

示例代码

C++版本代码

#include "pch.h"

#include <lua.hpp>

extern "C" {
    static int add(lua_State* L) {
        lua_Number n1 = luaL_checknumber(L, 1);
        lua_Number n2 = luaL_checknumber(L, 2);
        lua_pushnumber(L, n1 + n2);
        return 1;
    }

    static const luaL_Reg mylib[] = {
        {"add", add},
        {NULL, NULL}
    };

    __declspec(dllexport) int luaopen_testlib(lua_State* L) {
        luaL_newlib(L, mylib);
        return 1;
    }
}

BOOL APIENTRY DllMain(HMODULE hModule,
    DWORD  ul_reason_for_call,
    LPVOID lpReserved
)
{
    switch (ul_reason_for_call)
    {
    case DLL_PROCESS_ATTACH:
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}

C版本代码

#include <lua.h>
#include <lauxlib.h>

static int add(lua_State* L) {
    lua_Number n1 = luaL_checknumber(L, 1);
    lua_Number n2 = luaL_checknumber(L, 2);
    lua_pushnumber(L, n1 + n2);
    return 1;
}

static luaL_Reg const mylib[] = {
    {"add", add},
    {NULL, NULL}
};

__declspec(dllexport) int luaopen_testc(lua_State* L) {
    luaL_newlib(L, mylib);
    return 1;
}

内容的提问来源于stack exchange,提问作者user7520417

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 03:05:28