首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >local socket = require("socket"),找不到模块'socket‘

local socket = require("socket"),找不到模块'socket‘
EN

Stack Overflow用户
提问于 2017-12-30 23:23:52
回答 2查看 3.9K关注 0票数 0

我正在Visual Studio2015的一个项目中使用Lua和C++。我已经使用Luarocks创建了socket/core.dll和mime/core.dll。我已经将core.dll添加到执行C++程序的调试文件夹中。我在lua中得到的错误是在"require("socket")“执行时产生的。下面是我得到的错误:

代码语言:javascript
复制
...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实例?

EN

回答 2

Stack Overflow用户

发布于 2018-04-12 12:37:03

你的处境和我非常相似。在我的例子中,我需要sample.lua中的socket.http

代码语言:javascript
复制
require("socket.http")
content, status, header = socket.http.request("http://website.com/aaa.php")

并遇到以下错误消息:

代码语言:javascript
复制
...\MyProject\Release\sample.lua:1: module 'socket.http' not found:
    no field package.preload['socket.http']
    no file '.\socket\http.lua'
    (...)

我已经通过在示例可执行文件所在的路径中放置一些必要的lua脚本和dll文件来解决此问题。

代码语言:javascript
复制
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.lua

cpp代码如下:

代码语言:javascript
复制
#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);
}
票数 1
EN

Stack Overflow用户

发布于 2017-12-30 23:49:31

我解决了一个类似的问题,将require改为:

代码语言:javascript
复制
require("socket.core")

当然,这只有在名为socket的文件夹中有core.dll才有效,该文件夹可以在本地或PATH / package.cpath等目录中找到。

您还可以将core.dll重命名为socket.dll (并将其放在可搜索的文件夹中)。

据我所知,问题是:所需的名称和实际的dll名称根本不匹配。

编辑:为了安全起见,我在本地将lua模块和dll放在一起,如下所示:

代码语言:javascript
复制
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.lua
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48035241

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档