尝试设置调试后出现混乱的 lua 路径
我想通过调试一个大型的 lua 代码库来进行调试。为此,我下载了 ZeroBrane,并按照他们的说明设置了捆绑的 mobdebug。
代码库是 koreader。以下 shell 脚本重现了我所做的事情:
# 构建 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
# 获取源代码
git clone https://github.com/koreader/koreader.git
cd koreader && ./kodev fetch-thirdparty
# 构建它,这将需要很长时间
./kodev build
# 假设您已经安装了 ZeroBrane
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"
# 执行它,这将运行 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 将(在某些时候)执行以下操作:
-- 为 '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 在做什么?如果没有设置任何路径,它总是假定某些默认的 LUA_PATH 和 LUA_CPATH 吗?因为没有指定路径它可以正常工作。
默认路径的值都在 luaconf.h#LUA_PATH_DEFAULT ff. (5.3) 中。
话虽如此 - 你的 LUA_CPATH 缺少默认的两个部分: LUA_CDIR/loadall.so 和 ./?.so。在你的情况下,问题是由第二个部分缺少引起的。
这是因为 ./kodev run 进行了一些额外的操作来设置运行时环境。在某个时刻,工作目录会被更改为 EMU_DIR (例如 ./koreader-emulator-x86_64-linux-gnu-debug/koreader)。这个目录也有一个有效的 libs/libkoreader-lfs.so。
将 LUA_CPATH 更改为包含 ./?.so:
export LUA_CPATH="$ZBS/bin/linux/x86/?.so;$ZBS/bin/linux/x86/clibs/?.so;./?.so"
- 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 代码?

你的代码试图加载库
libkoreader-lfs,但这个库在LUA_CPATH或LUA_PATH指定的路径中都找不到。我无法给出确切答案,因为我不知道你的项目结构,但由于当你不设置这些环境变量时它可以工作,而当你设置它们时它不能工作,这看起来像是你在覆盖一些默认值。尝试在这些变量中 添加 路径而不是 设置 它们:
export LUA_PATH="$LUA_PATH;./?.lua;$ZBS/lualibs/?/?.lua;$ZBS/lualibs/?.lua" export LUA_CPATH="$LUA_CPATH;$ZBS/bin/linux/x86/?.so;$ZBS/bin/linux/x86/clibs/?.so"