Lua 5.3运行LGI代码报错:找不到lgi.corelgilua51模块求助
问题:LGI安装后缺失lgi.corelgilua51模块(Lua 5.3环境)
问题复现
测试Lua代码
local lgi = require("lgi") local Gdk = lgi.Gdk local Gtk = lgi.Gtk Gtk.init() -- Create a new window local window = Gtk.Window({ title = "LGI Test Window", default_width = 300, default_height = 200, on_destroy = Gtk.main_quit, }) -- Create a label and add it to the window local label = Gtk.Label({ label = "Hello, LGI!" }) window:add(label) window:show_all() Gtk.main()
执行错误信息
lua: /home/username/.luarocks/share/lua/5.3/lgi/core.lua:14: module 'lgi.corelgilua51' not found: no field package.preload['lgi.corelgilua51'] no file '/home/username/.luarocks/share/lua/5.3/lgi/corelgilua51.lua' no file '/home/username/.luarocks/share/lua/5.3/lgi/corelgilua51/init.lua' no file '/usr/local/share/lua/5.3/lgi/corelgilua51.lua' no file '/usr/local/share/lua/5.3/lgi/corelgilua51/init.lua' no file '/usr/local/lib/lua/5.3/lgi/corelgilua51.lua' no file '/usr/local/lib/lua/5.3/lgi/corelgilua51/init.lua' no file './lgi/corelgilua51.lua' no file './lgi/corelgilua51/init.lua' no file '/home/username/.luarocks/lib/lua/5.3/lgi/corelgilua51.so' no file '/usr/local/lib/lua/5.3/lgi/corelgilua51.so' no file '/usr/local/lib/lua/5.3/loadall.so' no file './lgi/corelgilua51.so' no file '/home/username/.luarocks/lib/lua/5.3/lgi.so' no file '/usr/local/lib/lua/5.3/lgi.so' no file '/usr/local/lib/lua/5.3/loadall.so' no file './lgi.so' stack traceback: [C]: in function 'require' /home/username/.luarocks/share/lua/5.3/lgi/core.lua:14: in main chunk [C]: in function 'require' /home/username/.luarocks/share/lua/5.3/lgi/init.lua:19: in main chunk [C]: in function 'require' /home/username/.luarocks/share/lua/5.3/lgi.lua:19: in main chunk [C]: in function 'require' init2.lua:1: in main chunk
LGI安装目录文件列表
drwxr-xr-x. 1 username username 226 Nov 15 13:01 . drwxr-xr-x. 1 username username 30 Nov 15 13:05 .. -rw-r--r--. 1 username username 15928 Nov 15 13:01 class.lua -rw-r--r--. 1 username username 11130 Nov 15 13:01 component.lua -rw-r--r--. 1 username username 761 Nov 15 13:01 core.lua -rw-r--r--. 1 username username 3319 Nov 15 13:01 enum.lua -rw-r--r--. 1 username username 5939 Nov 15 13:01 ffi.lua -rw-r--r--. 1 username username 3403 Nov 15 13:01 init.lua -rw-r--r--. 1 username username 1090 Nov 15 13:01 log.lua -rw-r--r--. 1 username username 6217 Nov 15 13:01 namespace.lua drwxr-xr-x. 1 username username 524 Nov 15 13:01 override -rw-r--r--. 1 username username 1591 Nov 15 13:01 package.lua -rw-r--r--. 1 username username 7088 Nov 15 13:01 record.lua -rw-r--r--. 1 username username 15 Nov 15 13:01 version.lua
原因分析
lgi.corelgiluaXX是LGI的二进制核心扩展模块,XX对应Lua的版本号(如51对应Lua5.1,53对应Lua5.3)。缺失该模块的核心原因是:安装过程中未正确编译生成适配Lua5.3的二进制模块,或是luarocks使用了错误的Lua环境进行编译。- 部分LGI版本的代码中可能仍在尝试加载Lua5.1命名的模块,但实际Lua5.3环境需要的是对应53版本的模块文件。
解决方法
方法1:重新编译安装适配Lua5.3的LGI
- 卸载现有LGI:
luarocks remove lgi
- 安装系统依赖(根据发行版选择):
- Debian/Ubuntu:
sudo apt install lua5.3-dev libgtk-3-dev libgirepository1.0-dev - RHEL/CentOS:
sudo dnf install lua-devel gtk3-devel gobject-introspection-devel
- Debian/Ubuntu:
- 指定Lua版本重新安装LGI:
luarocks install lgi --lua-version=5.3
方法2:手动创建软链接适配模块名
如果重新安装后,在/home/username/.luarocks/lib/lua/5.3/lgi/目录下存在corelgilua53.so但找不到corelgilua51.so,可以手动创建软链接:
cd /home/username/.luarocks/lib/lua/5.3/lgi/ ln -s corelgilua53.so corelgilua51.so
方法3:确认LUA_CPATH配置
确保LUA_CPATH包含luarocks的二进制模块路径:
- 检查当前配置:
echo $LUA_CPATH
- 如果缺少对应路径,添加到环境变量:
export LUA_CPATH="$HOME/.luarocks/lib/lua/5.3/?.so;$LUA_CPATH"
可以将该命令添加到~/.bashrc或~/.profile中实现永久生效
内容的提问来源于stack exchange,提问作者Bhaumik Tripathi
相关产品推荐
相关产品推荐

