根据前面的一个问题(回答了) 这里。我设法解决了这个特定的问题,但又碰到了另一个问题--这个问题的第三次更新中有一些细节,但我现在把它们移到这里,因为这是一个新的问题:
我已经安装了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‘,并将其与luarocks版本的MSVCR80.DLL连接起来,但我不知道如何做到这一点。
更新
好的,我发现这篇文章看起来很有前途:链接到文章。但在某些地方,我不再犯同样的错误。现在我得到的错误是:
日志上写着:
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 ..。请帮帮忙!
UPDATE2
因此,我删除了所有lua -related (路径和所有)。然后我重新安装:
为了运行lua.exe,我不得不在我的路径中添加luarocks。
然后我运行我的测试脚本。它在错误...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中运行这个的。然后,我决定在命令行上尝试这一点(因为我认为zerobrain有自己的lua版本)。
..。而且起作用了!
所以我在这里发现了一大堆问题。零(字面意思)似乎是%$的蒸汽堆-完全忽略您在其他地方安装的任何东西。yaml中有些bug需要额外的命令行参数。在lfs中存在64位问题.所有这些东西都没有以任何合理的方式结合起来.
我会发表一个答覆,详细列出以下各点所需的步骤:
清单不长--应该很简单,但事实并非如此。
发布于 2016-08-23 08:03:09
这是我承诺的安装说明..。我没有详细说明我从哪里得到的所有文件准确,但一个快速的谷歌搜索应该可以让你那里。如果不问,我会找到他们的!
1.用Lua5.1和LOVE安装LuaRocks
- PATH : `D:\install-path\luarocks;D:\install-path\love;`
- PATHEXT : `.LUA`
- LUA\_PATH : `D:\install-path\luarocks\systree\share\lua\5.1\?.lua;D:\install-path\luarocks\systree\share\lua\5.1\?\init.lua;`
- LUA\_CPATH: `D:\install-path\luarocks\systree\lib\lua\5.1\?.dll`
2.安装LUA插座
luasocket-2.0.2-3.win32-x86.rock
并以管理员身份打开cmd提示符luarocks install luasocket-2.0.2-3.win32-x86.rock
LUA_PATH=D:\install-path\luarocks\systree\share\lua\5.1\?.lua
LUA_CPATH=D:\install-path\luarocks\systree\lib\lua\5.1\?.dll
3. LUA档案系统(LFS)
64位系统存在一个问题,即函数名从function()改为function32() (microsoft做得很好),因此使用较新的MSVCR的旧库在找不到函数起始点时有问题。这些说明展示了如何安装lfs (有此问题)并解决它。如果你用的是32位,你就不用这么做了-
luarocks make
--这将安装lfs (请注意,链接器行在末尾使用-lMSVCR80 --这是在stdout中打印的)。D:\install-path\luarocks\systree\lib\lua\5.1
4. YAML \ LUB
luarocks install luafilesystem-1.6.3-2.src.rock
luarocks install lub-1.1.0-1.src.rock
luarocks install yaml-1.1.2-1.src.rock CC="mingw32-gcc -DYAML_DECLARE_STATIC"
5.其他陷阱
我想就是这样..。老实说,这感觉就像这些东西是由旧的青筋和零星的运气联系在一起的:o -这是我第一次经历lua/爱情,到目前为止这是一次相当糟糕的经历;但是现在我可以做一些工作,看看它是否和它的声誉一样好.)请随时添加/评论额外的陷阱/注释,我会更新(或者自己更新)。
https://stackoverflow.com/questions/39077613
复制相似问题