【发布时间】:2016-12-28 21:23:54
【问题描述】:
接续上一个问题(已回答)here。我设法解决了特定问题,但随后又遇到了另一个问题 - 该问题的第三次更新中有详细信息,但我将它们移到这里,因为它现在是一个新问题:
我已经安装了 luarocks(它带有 lua 和一个版本的 msvcr80.dll)。然后我终于设法安装了yaml。由于本地 IT 阻塞,我无法直接从“luarocks install yaml”命令行安装它,但我能够下载 src.rock 文件并按如下方式安装它(及其依赖项):
luarocks install luafilesystem-1.6.3-2.src.rock (required buy lub)
luarocks install lub-1.1.0-1.src.rock (required by yaml)
luarocks install yaml-1.1.2-1.src.rock CC="gcc -DYAML_DECLARE_STATIC"
然后我将包路径添加到我的脚本中(现在),以便我可以使用 yaml,这是我非常基本的测试脚本:
package.path = "D:\\user\\install\\lua\\luarocks\\systree\\share\\lua\\5.1\\?\\init.lua;" .. package.path
print("package.path: " .. package.path)
local yaml = require("yaml")
local data = yaml.load("mytest.yaml")
正如您所看到的,我在包含 yaml 并尝试读取 yaml 文件方面所做的一切 - 非常基本。当我运行它时,我收到以下错误:
我的日志看起来像:
D:\user\install\lua\luarocks\systree\share\lua\5.1\?\init.lua;D:\user\install\lua\luarocks\systree\share\lua\5.1\?.lua;D:\user\install\lua\luarocks\systree\share\lua\5.1\?\init.lua;./?.lua;./?/init.lua;./lua/?.lua;./lua/?/init.lua;D:\user\install\lua\zerobrane\lualibs/?/?.lua;D:\user\install\lua\zerobrane\lualibs/?.lua;D:\user\install\lua\zerobrane\lualibs/?/?/init.lua;D:\user\install\lua\zerobrane\lualibs/?/init.lua
D:\user\install\lua\zerobrane\bin\lua.exe: error loading module 'lfs' from file 'D:\user\install\lua\luarocks\systree\lib\lua\5.1\lfs.dll':
The specified procedure could not be found.
stack traceback:
[C]: at 0x66df0460
[C]: in function 'require'
...\install\lua\luarocks\systree\share\lua\5.1\lub\init.lua:17: in main chunk
[C]: in function 'require'
...install\lua\luarocks\systree\share\lua\5.1\yaml\init.lua:25: in main chunk
[C]: in function 'require'
D:\user\workspace\_lua\myluatest.lua:3: in main chunk
[C]: at 0x00402a57
Program completed in 56.64 seconds (pid: 15856).
它肯定是在 luarocks 安装文件夹中使用 MSVCR80.DLL,因为当我更改该文件的名称时,它会抱怨缺少 DLL。
所以问题似乎是 luafilesystem 必须需要一个不同版本的 MSVCR80.DLL 然后安装 luarocks。我不知道如何解决。如果我能够运行命令“luarocks install yaml”,那会有什么不同吗? - msvcr80.dll 文件有更新吗?但是如果我更改此文件版本,那么 luarocks 的其他部分不会停止工作吗? - 我真的不明白。
我想到的只有一个想法,那就是安装“lfs”并将其链接到 MSVCR80.DLL 的 luarocks 版本,但同样 - 我不知道该怎么做。
更新
好的,我发现这篇文章看起来很有希望:link-to-article。但是在某个地方,我不再遇到同样的错误。现在我得到的错误是:
日志说:
d:\user\install\lua\zerobrane\bin\lua.exe: error loading module 'lfs' from file 'D:\user\install\lua\luarocks\systree\lib\lua\5.1\lfs.dll':
A dynamic link library (DLL) initialization routine failed.
stack traceback:
[C]: at 0x66df0460
[C]: in function 'require'
...\install\lua\luarocks\systree\share\lua\5.1\lub\init.lua:17: in main chunk
[C]: in function 'require'
...install\lua\luarocks\systree\share\lua\5.1\yaml\init.lua:25: in main chunk
[C]: in function 'require'
D:\user\workspace\_lua\myluatest.lua:10: in main chunk
[C]: at 0x00402a57
Program completed in 56.52 seconds (pid: 15220).
我已尝试删除 lua/love/luarocks + 所有软件包并重新开始。一旦我尝试安装 luafilesystem(我是否链接到 MSVCR80.dll 的天气),我就会收到同样的错误。
我目前在微软运行时地狱中:o .. 请帮忙!
更新2
所以我删除了所有与 lua 相关的内容(路径和所有)。然后我重新安装:
- luarocks
- luasockets
- lfs
- 卢布
- yaml
- zerobrain
我必须将 luarocks 添加到我的路径中,以便我可以运行 lua.exe。
然后我运行了我的测试脚本。它失败并出现错误...procedure entry point utime could not be located...。
所以恢复正常。然后我从 git 得到了 lfs 源代码。我运行了 make(它使用 -lMSVCR80 链接。我重新运行了没有 MSVCR80 的链接命令以生成新的 lfs.dll 并将其复制到 D:\user\install\lua\luarocks\systree\lib\lua\5.1 中的那个。
现在我再次运行我的脚本,得到它抱怨找不到lub\autoload.lua 的结果。我运行以下脚本只是为了查看 lfs 是否正常:
package.path = "D:\\adadachanji\\install\\lua\\luarocks\\systree\\share\\lua\\5.1\\?\\init.lua;" .. package.path
package.path = "D:\\adadachanji\\install\\lua\\luarocks\\systree\\share\\lua\\5.1\\?.lua;" .. package.path
print("package.path: " .. package.path)
local lfs = require( "lfs" )
local doc_path = "d:\\user"
print("doc_path = " .. doc_path)
for file in lfs.dir( doc_path ) do
print( "Found file: " .. file )
end
这工作正常:)
现在我添加 lub:local lub = require("lub"),再次运行:它可以工作 :)
现在我添加 yaml:local yaml = require("yaml"),然后我得到了我的错误。
我在 zerobrain IDE 中运行它。然后我决定在命令行上试试这个(因为我认为 zerobrain 有自己的 lua 版本)。
...它的工作原理!
所以我在这里发现了一大堆问题...... zerobrains(字面意思)似乎是一堆 %$ - 完全忽略了您在其他地方安装的任何内容。 yaml 中存在需要额外命令行参数的错误。 lfs 中存在 64 位问题。这些东西都没有以任何明智的方式真正整合......
我将发布一个答案,详细说明将以下内容放在一起所需的步骤:
- lua(通过 luarocks)
- lua 套接字
- 爱
- yaml(使用 lfs 和 lub)
不是很长的列表 - 应该很简单,但不是。
【问题讨论】:
标签: windows lua runtime-error yaml msvcrt