Я использую Embarcadero C ++ Builder 10.1 32 бит на Windows 7 64 бит компьютер.Я компилирую все с 32-битной бесплатной версией Embarcadero IDE CB10.1.Я собрал 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.
Я запускаю lua из командной строки DOS, используя мой скомпилированный файл 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.h', используя 'options.lua', как требуется.Используя 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.Второе требование 'ssl.context' не выполняется с "модулем" 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.
Я не могу найти никаких указаний по этому вопросу.