Я бы хотел отладить свой путь через большую кодовую базу lua. Для этого я скачал ZeroBrane и следовал их инструкциям по настройке связанного mobdebug.
Кодовая база - koreader. Следующий шеллскрипт воспроизводит то, что я сделал:
# dependencies for building koreader
sudo apt-get install build-essential git patch wget unzip \
gettext autoconf automake cmake libtool nasm luarocks libsdl2-dev \
libssl-dev libffi-dev libsdl2-dev libc6-dev-i386 xutils-dev linux-libc-dev:i386 zlib1g:i386
# get the source
git clone https://github.com/koreader/koreader.git
cd koreader && ./kodev fetch-thirdparty
# build it, this will take a long time
./kodev build
# assuming you have ZeroBrane installed
export ZBS=/opt/zbstudio
export LUA_PATH="./?.lua;$ZBS/lualibs/?/?.lua;$ZBS/lualibs/?.lua"
export LUA_CPATH="$ZBS/bin/linux/x86/?.so;$ZBS/bin/linux/x86/clibs/?.so"
# execute it, this will run lua
./kodev run
Выполнение ./kodev run
приводит к следующему сообщению об ошибке:
[*] Current time: 10/14/19-17:55:34
./luajit: ./datastorage.lua:3: module 'libs/libkoreader-lfs' not found:
no field package.preload['libs/libkoreader-lfs']
no file './libs/libkoreader-lfs.lua'
no file '/opt/zbstudio/lualibs/libs/libkoreader-lfs/libs/libkoreader-lfs.lua'
no file '/opt/zbstudio/lualibs/libs/libkoreader-lfs.lua'
no file '/opt/zbstudio/bin/linux/x86/libs/libkoreader-lfs.so'
no file '/opt/zbstudio/bin/linux/x86/clibs/libs/libkoreader-lfs.so'
stack traceback:
[C]: in function 'require'
./datastorage.lua:3: in main chunk
[C]: in function 'require'
./reader.lua:18: in main chunk
[C]: at 0x55a81bf25771
~/programming/koreader
Если нет определений LUA_PATH
и LUA_CPATH
, проблем нет и koreader работает нормально. Итак, я предполагаю, что пути импорта как-то нарушены. Как мне установить это правильно?
Может быть, это поможет вам, если я правильно прочитал код, ./kodev run
(в какой-то момент) выполнит это:
-- set search path for 'require()'
package.path =
"common/?.lua;rocks/share/lua/5.1/?.lua;frontend/?.lua;" ..
package.path
package.cpath =
"common/?.so;common/?.dll;/usr/lib/lua/?.so;rocks/lib/lua/5.1/?.so;" ..
package.cpath
Фактическое местоположениеlibkoreader-lfs.so:
/home/lklein/programming/koreader/base/build/x86_64-linux-gnu-debug/libs/libkoreader-lfs.so
Действительно, если я добавлю это к CPATH с помощью
/home/lklein/programming/koreader/base/build/x86_64-linux-gnu-debug/?.so
, то он может работать. Что здесь делает Луа? Всегда ли предполагается наличие некоторых значений по умолчанию LUA_PATH и LUA_CPATH, если они не установлены? Потому что все работает нормально, без указания пути.