我在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实例?
答案 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);
}