我试图让luasocket在比兹霍克的lua脚本环境中工作,但到目前为止还没有成功。我下载了luasocket 这里的这里版本,确保安装了vc8,并检查了bizhawk: 5.1附带的lua版本。
但是,当我启动脚本时,我会得到以下错误:
LuaInterface.LuaScriptException: error loading module 'socket.core' from file './libs/socket\core.dll':
Das angegebene Modul wurde nicht gefunden. (the given module was not found)lua代码:
package.path = package.path..';./libs/lua/?.lua'
package.cpath = package.cpath..';./libs/?.dll'
local socket = require("socket")文件系统结构:
libs
> lua
> socket
ftp.lua http.lua smtp.lua tp.lua url.lua
ltn12.lua
mime.lua
socket.lua
> socket
core.dll
> mime
core.dll它似乎找到了文件,因为当我的文件结构出错时,它给了我实际的文件找不到的错误。我最好的猜测是,Bizhawk附带的lua与外部luasocket库二进制文件之间存在某种不兼容,但我没有任何想法。
发布于 2015-11-02 07:07:22
这个家伙已经设置好了:https://github.com/antogerva/emuHostUDP (解压缩到emuhawk.exe基本目录)。他的例子似乎奏效了,但它可能并不包含你所需要的一切。比如HTTP。
由于项目很复杂,而且luasocket示例很糟糕,所以这里有一个用于测试http的一行程序:
print(require("socket.http").request{ url = "http://www.google.com" });按照他的模型,我应用了以下方法: lua的内容指向root;lua5.1.dll用于根。请注意,我们不会使用来自luasocket的core.dlls。这是因为bizhawk现在已经集成了它们;这对于解决BizHawk中带有luasocket的bug是必要的。
更具体地说,我们有
(使用来自http://files.luaforge.net/releases/luasocket/luasocket/luasocket-2.0.2/luasocket-2.0.2-lua-5.1.2-Win32-vc8.zip的文件)
我不能确切地说为什么所有这些都是必要的,但我认为这是奇迹,因为我们有一个定制的lua。
在使用lua时,如果您找到了一个可以工作的目录结构,最好不要再纠缠它了。
Update:(可能过时了)一旦您做了一些重要的事情,您可能会发现bizhawk崩溃了。这似乎是由于与luasocket的“保护”制度相冲突。检查http.lua并观察最后的代码,它通过socket.protect发送一个函数来包装它。移除socket.protect包装器,它将解决这个问题。
发布于 2015-10-30 04:17:47
我怀疑这是因为对lua51.dll的依赖。luasocket core.dll库是针对lua51.dll链接的(很有可能;您可以运行depends或类似的工具来确定),这可能不存在,从而阻止了socket.core的加载。
即使您找到了lua51.dll,如果Bizhawk是用lua51.dll静态编译的,也不太可能工作,因为这将导致两个解释器加载到相同的进程中,这是导致seg错误的一个原因。
有三个主要选项,但它们都取决于Bizhawk项目的结构:
lua51.dll编译的(这个dll是一个独立的文件)。在这种情况下,您需要确保您使用的socket/core.dll是针对同一个库编译的,并且它应该可以工作(只要运行时间相同,并且lua51.sll在PATH中可用)。lua51.dll静态编译的。最简单的选择也是静态地将luasocket库编译到可执行文件中。如果所有这些都没有帮助您解决问题,您将需要为您的Windows获取depends,并以“分析”模式运行它,这将告诉您加载该DLL时发生的确切错误。
https://stackoverflow.com/questions/33428382
复制相似问题