local socket = require(“socket”),找不到模块'socket'

时间:2017-12-30 15:23:52

标签: c++ sockets dll lua

我在Visual Studio 2015的项目中使用Lua和C ++。我使用Luarocks创建socket / core.dll和mime / core.dll。我已将core.dll添加到我的C ++程序执行的调试文件夹中。当执行“require(”socket“)”时,生成lua中出现的错误。我得到以下错误:

df['clean_date'] = pd.to_datetime(df['date'].str.replace('(?<=^\d).*(?=\d)', '') + ' 2016')

    date    value clean_date
1  1 3 Sep      9 2016-09-13
2    5 Oct      8 2016-10-05
3   10 Oct     99 2016-10-10

总结一下:在运行C ++项目时,如何正确地将core.dll或其他luasocket文件链接到我当前的Lua实例?

2 个答案:

答案 0 :(得分:0)

通过将require更改为:

,我解决了类似的问题
require("socket.core")

当然,如果core.dll位于名为socket的文件夹中,可以在本地或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.lua

答案 1 :(得分:0)

你和我的情况非常相似。就我而言,我在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.lua

cpp代码如下:

#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);
}