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
相关产品推荐
相关产品推荐

