我正在Visual Studio2015的一个项目中使用Lua和C++。我已经使用Luarocks创建了socket/core.dll和mime/core.dll。我已经将core.dll添加到执行C++程序的调试文件夹中。我在lua中得到的错误是在"require("socket")“执行时产生的。下面是我得到的错误:
...s\Visual Studio 2015\Projects\RaceGame3\Debug\Client.lua:17: module
'socket' not found:
no field package.preload['socket']
no file 'C:\Users\Username\Documents\Visual Studio
2015\Projects\RaceGame3\Debug\lua\socket.lua'
no file 'C:\Users\Username\Documents\Visual Studio 2015\Projects\RaceGame3\Debug\lua\socket\init.lua'
no file 'C:\Users\Username\Documents\Visual Studio 2015\Projects\RaceGame3\Debug\socket.lua'
no file 'C:\Users\Username\Documents\Visual Studio 2015\Projects\RaceGame3\Debug\socket\init.lua'
no file 'C:\Users\Username\Documents\Visual Studio 2015\Projects\RaceGame3\Debug\..\share\lua\5.3\socket.lua'
no file 'C:\Users\Username\Documents\Visual Studio 2015\Projects\RaceGame3\Debug\..\share\lua\5.3\socket\init.lua'
no file '.\socket.lua'
no file '.\socket\init.lua'
no file 'C:\Users\Username\Documents\Visual Studio 2015\Projects\RaceGame3\Debug\socket.dll'
no file 'C:\Users\Username\Documents\Visual Studio 2015\Projects\RaceGame3\Debug\..\lib\lua\5.3\socket.dll'
no file 'C:\Users\Username\Documents\Visual Studio 2015\Projects\RaceGame3\Debug\loadall.dll'
no file '.\socket.dll'总而言之:在运行C++项目时,如何正确地将core.dll或其他luasocket文件链接到当前的Lua实例?
发布于 2018-04-12 12:37:03
你的处境和我非常相似。在我的例子中,我需要sample.lua中的socket.http,
require("socket.http")
content, status, header = socket.http.request("http://website.com/aaa.php")并遇到以下错误消息:
...\MyProject\Release\sample.lua:1: module 'socket.http' not found:
no field package.preload['socket.http']
no file '.\socket\http.lua'
(...)我已经通过在示例可执行文件所在的路径中放置一些必要的lua脚本和dll文件来解决此问题。
Release
├── socket
│ ├── ftp.lua
│ ├── http.lua
│ ├── smtp.lua
│ ├── tp.lua
│ └── url.lua
├── mime
│ └── core.dll
├── ltn12.lua
├── mime.lua
├── socket.dll <--- renamed from $(LUA_PATH)\clibs\socket\core.dll
├── socket.lua
├── lua5.1.dll
├── sample.exe
└── sample.luacpp代码如下:
#pragma comment(lib, "lua5.1.lib")
#include <lua.hpp>
void main() {
lua_State *L = luaL_newstate();
luaL_openlibs(L);
luaL_dofile(L, "sample.lua");
lua_close(L);
}发布于 2017-12-30 23:49:31
我解决了一个类似的问题,将require改为:
require("socket.core")当然,这只有在名为socket的文件夹中有core.dll才有效,该文件夹可以在本地或PATH / package.cpath等目录中找到。
您还可以将core.dll重命名为socket.dll (并将其放在可搜索的文件夹中)。
据我所知,问题是:所需的名称和实际的dll名称根本不匹配。
编辑:为了安全起见,我在本地将lua模块和dll放在一起,如下所示:
socket
├── core.dll
├── ltn12.lua
├── mime.lua
├── mime-1.0.3.dll
├── socket
│ ├── ftp.lua
│ ├── headers.lua
│ ├── http.lua
│ ├── smtp.lua
│ ├── tp.lua
│ └── url.lua
└── socket.luahttps://stackoverflow.com/questions/48035241
复制相似问题