Я уже некоторое время работаю над этим и не могу понять, в чем дело.
На данный момент я построил все из исходного кода, и он все еще не работает. Моя среда - Windows 10 x64, и я компилирую с Cygwin MinGW-w64. Все скомпилировано как i686 (32-разрядная версия), а не как x86_64.
Для справки, случаи, когда я использую gcc
, на самом деле i686-w64-mingw32-gcc
. liblua53.dll.a
и libyaml.a
были скомпилированы из исходного кода с использованием Lua 5.3.5 и LibYAML 0.2.2.
Я построил объекты:
gcc -DVERSION=\"git-5695363\" -Ilua-5.3/src -Ilibyaml/src/include -c ext/yaml/emitter.c -o emitter.o
gcc -DVERSION=\"git-5695363\" -Ilua-5.3/src -Ilibyaml/src/include -c ext/yaml/scanner.c -o scanner.o
gcc -DVERSION=\"git-5695363\" -Ilua-5.3/src -Ilibyaml/src/include -c ext/yaml/parser.c -o parser.o
gcc -DVERSION=\"git-5695363\" -Ilua-5.3/src -Ilibyaml/src/include -c ext/yaml/yaml.c -o yaml.o
Затем связаны:
gcc -shared -static -s -Llua-5.3/dist -Llibyaml/dist emitter.o parser.o scanner.o yaml.o -lyaml -llua53.dll -o lyaml.dll
Я связал его как -shared
, потому что вывод dll, и как -static
, потому что я статически связываю libyaml.a. Я также попытался скомпилировать с динамическим связыванием с libyaml.dll с той же ошибкой от Lua.
Моя среда Lua была скомпилирована из исходного кода и компилятора:
> lua53.exe -v
Lua 5.3.5 Copyright (C) 1994-2018 Lua.org, PUC-Rio
Запуск простого скрипта работает нормально:
> lua53.exe -e 'print("Hello!")'
Hello!
Но я не могу загрузить библиотеку:
> lua53.exe -e 'require("lyaml")'
lua53.exe: error loading module 'lyaml' from file 'lyaml.dll':
The specified procedure could not be found.
stack traceback:
[C]: in ?
[C]: in function 'require'
(command line):1: in main chunk
[C]: in ?
Я знаю, что это ошибка Windows, но я не знаю, какая процедура отсутствует или откуда она берется.
Я также проверил, что все зависимости динамического связывания выполняются и функции экспортируются:
![enter image description here](https://i.stack.imgur.com/IRJlN.png)
Как я могу отладить это дальше?