首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MSVCR80.dll在使用lua和luafilesystem时出现的运行时错误

MSVCR80.dll在使用lua和luafilesystem时出现的运行时错误
EN

Stack Overflow用户
提问于 2016-08-22 10:49:44
回答 1查看 300关注 0票数 1

根据前面的一个问题(回答了) 这里。我设法解决了这个特定的问题,但又碰到了另一个问题--这个问题的第三次更新中有一些细节,但我现在把它们移到这里,因为这是一个新的问题:

我已经安装了luarocks (它随lua和MSVCR80.dll版本而来)。然后我终于成功地安装了yaml。由于本地it块,我无法从"luarocks install yaml“命令行直接安装它,但我能够下载src.rock文件并按如下方式安装(及其依赖项):

代码语言:javascript
运行
复制
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了,下面是我非常基本的测试脚本:

代码语言:javascript
运行
复制
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文件方面所做的一切--非常基本。当我运行它时,我会得到以下错误:

我的日志看起来是:

代码语言:javascript
运行
复制
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连接起来,但我不知道如何做到这一点。

更新

好的,我发现这篇文章看起来很有前途:链接到文章。但在某些地方,我不再犯同样的错误。现在我得到的错误是:

日志上写着:

代码语言:javascript
运行
复制
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 (路径和所有)。然后我重新安装:

  • 卢阿罗克
  • [医]灯笼
  • lfs
  • 卢布
  • yaml
  • 零值

为了运行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是否正常,我运行了以下脚本:

代码语言:javascript
运行
复制
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位问题.所有这些东西都没有以任何合理的方式结合起来.

我会发表一个答覆,详细列出以下各点所需的步骤:

  • lua (通过luarocks)
  • lua插座
  • 喜爱
  • yaml (使用lfs和lub)

清单不长--应该很简单,但事实并非如此。

EN

回答 1

Stack Overflow用户

发布于 2016-08-23 08:03:09

这是我承诺的安装说明..。我没有详细说明我从哪里得到的所有文件准确,但一个快速的谷歌搜索应该可以让你那里。如果不问,我会找到他们的!

1.用Lua5.1和LOVE安装LuaRocks

  1. 加载LuaRocks,然后输入以下命令(根据需要修改路径):install /L /p D:\install- path \luarocks /MW /F 注意: /L告诉您要安装Lua5.1(所以您也不必安装它),并且它使用了需要在您的路径中的mingw编译器。 注意:您可以在网上安装 " mingw -get-setup.exe“--它的默认路径是: C:\MinGW,但是可以随心所欲地放置它!
  2. 下载"love-0.10.1-win64“(或其他版本),并将其解压缩到您想要它生活的任何地方(它不需要安装)
  3. 添加/修改以下env (根据需要修改路径):
代码语言:javascript
运行
复制
- 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插座

  1. 下载luasocket-2.0.2-3.win32-x86.rock并以管理员身份打开cmd提示符
  2. 光盘进入下载文件夹
  3. 运行命令:luarocks install luasocket-2.0.2-3.win32-x86.rock
  4. 添加以下环境变量(根据需要修改路径):
    • 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位,你就不用这么做了-

  1. 从git获取luafilesystem,将其解压缩并保存到该文件夹中(Luafilesystem)。
  2. 运行luarocks make --这将安装lfs (请注意,链接器行在末尾使用-lMSVCR80 --这是在stdout中打印的)。
  3. 复制和粘贴链接线,删除"-lMSVCR80“并按enter键。这将成为一个新的本地lfs.dll
  4. 将其复制到现有lfs.dll的顶部:D:\install-path\luarocks\systree\lib\lua\5.1

4. YAML \ LUB

  1. 在mingw文件夹中,如果未将gcc.exe复制到mingw32-gcc.exe,请确保mingw32-gcc.exe存在。
  2. 将命令promt作为admin和cd打开到下载文件夹中。
  3. 对于以下每一项,从src.rock下载https://luarocks.org文件并运行以下命令(yaml依赖于lub,lub依赖于luafilesystem):
    • (不推荐-请参阅第3节):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.其他陷阱

  1. 不要费心于无脑(零)-除非你想使用lua的版本,因为它会导致与你漂亮的luarocks设置的冲突。此外,它无法处理任何深度的代码完成(即任何添加的模块)。如果您想将其与爱一起使用,则需要将活动文件夹设置为main.lua文件所在的子文件夹.然后,它的文件树视图会缩放到这个文件夹中,这样您就无法轻松地切换回其他文件夹。
  2. 不要使用consoleZ (或控制台2,因为它也可能是已知的)。它似乎与环境变量有问题。如果我添加变量LUA_PATH,我会得到奇怪的错误,事实上,如果我添加任何以“LUA.”开头的变量我有错误--我已经有其他的vars以"LUA“开头,所以在放弃之前,它可能只能处理这么多!无论如何,使用bog标准命令提示符是有效的,所以我放弃了consoleZ,开始使用ConEmu --好多了!

我想就是这样..。老实说,这感觉就像这些东西是由旧的青筋和零星的运气联系在一起的:o -这是我第一次经历lua/爱情,到目前为止这是一次相当糟糕的经历;但是现在我可以做一些工作,看看它是否和它的声誉一样好.)请随时添加/评论额外的陷阱/注释,我会更新(或者自己更新)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39077613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档