lua 5.3.5 + luasocket 3.0-rc1 + luasec 0.8 : WIN32 DLL with multiple luaopen_xxx_xxx exported function names
我正在使用在Windows 7 64位计算机上的Embarcadero C++Builder 10.1 32位。我使用Embarcadero IDE的CB10.1 32位免费版本编译所有内容。我已经将lua 5.3.5编译为dll。然后我将lua.c编译为DOS可执行文件lua.exe(使用lua dll),它似乎可以正确运行。我编译了luasocket 3.0rc1到2个dll(socket和mime)。
将luasocket脚本(ltn12.lua、mbox.lua、mime.lua和socket.lua)放置在“lua”文件夹中。剩余的luasocket脚本('ftp.lua','headers.lua','http.lua','smtp.lua','tp.lua'和'url.lua')放置在“socket文件夹中。'socket.dll'重命名为“core.dll”并放置在“socket”文件夹中。'mime.dll'重命名为'core.dll'并放置在'mime'文件夹中。
我从DOS提示运行lua,使用我的编译lua.c + dll。我可以正确地进行http / ftp / smtp请求。lua似乎能够正确找到所有的luasocket core.dll和\ * .lua脚本。
但是当我请求使用https的网页时,当lua尝试加载'https.lua'时,会提示找不到模块的错误。
因此,我正在尝试编译和安装luaSec 0.8和OpenSSL 1.0.2s。
我想将luaSec编译为WIN32 dll。我能够做到这一点。我使用“options.lua”创建了一个新的“options.h”。使用一个DLL依赖程序(Dependency Walker 2.2),我看到四个从dll导出的函数:
luaopen_ssl_config
luaopen_ssl_context
luaopen_ssl_core
luaopen_ssl_x509
将dll重命名为core.dll并放置在“ssl”文件夹中。'https.lua'从luaSec分发中放置在'ssl'文件夹中,并将'ssl.lua'放置在'lua'文件夹中。
然后:
我的lua脚本需要luasocket:
local url = require("socket.url")
local http = require("socket.http")
luasocket(在http.lua中)需要luaSec:
local https = assert(require("ssl.https"),'LuaSocket: LuaSec not found')
然后luaSec(在https.lua中)需要:
local ssl = require("ssl")
然后luaSec(在ssl.lua中)需要:
local core = require("ssl.core")
local context = require("ssl.context")
local x509 = require("ssl.x509")
local config = require("ssl.config")
'ssl.core'的第一个require起作用。第二个'require' 'ssl.context'失败,显示“module' ssl.context' not found”。
如果我将luaSec编译为四个dll(core.dll,context.dll,x509.dll和config.dll),使得每个dll只有一个导出函数,并且该函数名称与require语句相匹配,则https请求将起作用。
我不清楚lua如何查找'core.dll'中的luaopen_ssl_x509、luaopen_ssl_context和luaopen_ssl_config。也许lua require()函数只支持每个dll一个导出函数。
我找不到任何关于这个的指导。
- Lua 虚拟机加密load(string.dump(function)) 后执行失败问题如何解决
- 我想创建一个 Nginx 规则,禁止访问
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?

如@siffiejoe所建议的,不要将DLL放到
ssl\core.dll中,而是将其作为ssl.dll可用。第一个require调用只是一种偶然的情况,因为当你需要ssl.core时,Lua将其映射到ssl\core(作为尝试之一),这将package.cpath变量中的....\?.dll掩码映射到....\ssl\core.dll,然后在其中找到并调用luaopen_ssl_core。对于其他三个调用,则会出现问题。要解决此问题,只需将其作为ssl.dll提供即可。