我想使用我自己的lua解释器(5.1)在Windows 7上使用Zerobranestudio 1.4调试我的应用程序。
我将user.lua
中的解释器设置为
path.lua = '<PATH_OWN_INTERPRETER>'
my_app.lua
具有以下作为第一行
package.path = package.path .. ';../CommonScripts/?.lua'
print(package.path)
哪个打印
;.?.lua;<PATH_OWN_INTERPRETER>lua?.lua;<PATH_OWN_INTERPRETER>lua?init.lua;<PATH_OWN_INTERPRETER>?.lua;<PATH_OWN_INTERPRETER>?init.lua;./?.lua;./?/init.lua;./lua/?.lua;./lua/?/init.lua;<PATH_ZBS>lualibs/?/?.lua;<PATH_ZBS>lualibs/?.lua;<PATH_ZBS>lualibs/?/?/init.lua;<PATH_ZBS>lualibs/?/init.lua;../CommonScripts/?.lua
当我开始调试时,发生以下错误。
<PATH_ZBS>lualibs/ssl.lua:19: module 'ssl.x509' not found:
no field package.preload['ssl.x509']
no file '.sslx509.lua'
no file '<PATH_OWN_INTERPRETER>luasslx509.lua'
no file '<PATH_OWN_INTERPRETER>luasslx509init.lua'
no file '<PATH_OWN_INTERPRETER>sslx509.lua'
no file '<PATH_OWN_INTERPRETER>sslx509init.lua'
no file './sslx509.lua'
no file './sslx509/init.lua'
no file './lua/sslx509.lua'
no file './lua/sslx509/init.lua'
no file '<PATH_ZBS>lualibs/sslx509/sslx509.lua'
no file '<PATH_ZBS>lualibs/sslx509.lua'
no file '<PATH_ZBS>lualibs/sslx509/sslx509/init.lua'
no file '<PATH_ZBS>lualibs/sslx509/init.lua'
no file '../CommonScripts/sslx509.lua'
no file '.sslx509.dll'
no file '.sslx50951.dll'
no file '<PATH_OWN_INTERPRETER>sslx509.dll'
no file '<PATH_OWN_INTERPRETER>sslx50951.dll'
no file '<PATH_OWN_INTERPRETER>clibssslx509.dll'
no file '<PATH_OWN_INTERPRETER>clibssslx50951.dll'
no file '<PATH_OWN_INTERPRETER>loadall.dll'
no file '<PATH_OWN_INTERPRETER>clibsloadall.dll'
no file '<PATH_ZBS>bin/sslx509.dll'
no file '<PATH_ZBS>bin/clibs/sslx509.dll'
no module 'ssl.x509' in file '<PATH_OWN_INTERPRETER>ssl.dll'
stack traceback:
[C]: in function 'require'
<PATH_ZBS>lualibs/ssl.lua:19: in main chunk
[C]: in function 'require'
<PATH_OWN_INTERPRETER>sslhttps.lua:10: in main chunk
[C]: in function 'require'
../CommonScripts/Class2.lua:36: in main chunk
[C]: in function 'require'
../CommonScripts/Class1.lua:40: in main chunk
[C]: in function 'require'
my_app.lua:48: in main chunk
我在 Class2.lua:36
local https = require'ssl.https'
似乎ZB将内置的Lua解释器的目录与我想使用的目录混合在一起。
我该如何预防?
显然是将user.lua
中的LUA路径设置为
path.lua = '<PATH_OWN_INTERPRETER>'
它由Zerobrane Studio扩展到
<PATH_OWN_INTERPRETER>lua?.lua;
<PATH_OWN_INTERPRETER>lua?init.lua;
<PATH_OWN_INTERPRETER>?.lua;
<PATH_OWN_INTERPRETER>?init.lua;
在我自己的解释器中,SSL位于上面列表中的<PATH_OWN_INTERPRETER>luasslssl.lua
。
所以,我的解决方案是将LUA_PATH
定义为环境变量,以便我得到
<PATH_OWN_INTERPRETER>/?.lua;
<PATH_OWN_INTERPRETER>/lua/?.lua;
<PATH_OWN_INTERPRETER>/lua/?/?.lua;
在路径中。
@egorskriptunoff在他的评论中是正确的:您有<PATH_OWN_INTERPRETER>ssl.dll
,它似乎没有ssl.x509
模块(no module 'ssl.x509' in file '<PATH_OWN_INTERPRETER>ssl.dll'
),并且没有<PATH_OWN_INTERPRETER>ssl.lua
,因此该模块的LUA版本是从Zerobrane Studio文件夹中加载,但是该模块的二进制部分是从LUA文件夹中加载的,并且缺少(由于某种原因,X509组件)。您需要同时使用(LUA和二进制)组件。