为什么我在加载 LuaXML 时遇到错误,告诉我 luaL_regsiter 是一个未定义的符号?

如何解决为什么我在加载 LuaXML 时遇到错误,告诉我 luaL_regsiter 是一个未定义的符号?

我正在尝试运行一个使用 LuaXML 的简单 Lua 脚本。当我运行它时,它失败并显示以下消息:

/usr/bin/lua: error loading module 'LuaXML_lib' from file '/usr/local/lib/lua/5.3/LuaXML_lib.so':
    /usr/local/lib/lua/5.3/LuaXML_lib.so: undefined symbol: luaL_register
stack traceback:
    [C]: in ?
    [C]: in function 'require'
    /usr/local/share/lua/5.3/LuaXML.lua:1: in main chunk
    [C]: in function 'require'
    ./testluaxml.lua:3: in main chunk
    [C]: in ?

为什么我会收到这个错误,更重要的是,我该如何解决?

我的测试脚本 testluaxml.lua :

#!/usr/bin/lua

require 'LuaXML'

local testXmlFile = xml.load("./mytest.xml")
local node  = testXmlFile:find('tag')
print(node)

mytext.xml 的内容:

<tag>Hello World</tag>

我在 Ubuntu (20.04.1) 上运行 lua 5.3。

一个类似问题的答案()表明这可能是由于luarocks编译带有lua 5.1头文件的LuaXML模块。我不认为这是这里的情况,因为这是一个全新的 lua 安装。我用这一系列命令安装了软件包:

$ sudo apt install lua5.3
$ sudo apt install liblua5.3-dev
$ sudo apt install luarocks
$ sudo luarocks install luaxml
$ sudo luarocks install luafilesystem

当我在 LuaXML_lib.so 上运行 ldd 时,我得到这个输出:

$ sudo ldd -v LuaXML_lib.so

linux-vdso.so.1 (0x00007ffcbdba000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6
/lib64/ld-linux/x86-64.s0.2 (0x00007f84afeec000)

Version information for LuaXML_lib.so:
./LuaXML_lib.so:
        libc.so.6 (GLIBC_2.3) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.14) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.4) => /lib/x86_64-linux-gnu/libc.so.6
        libc.so.6 (GLIBC_2.2.5) => /lib/x86_64-linux-gnu/libc.so.6
/lib/x86_64-linux-gnu/libc.so.6:
        ld-linux-x86-64.so.2 (GLIBC_2.3) => /lib64/ld-linux-gnu-64.so.2
        ld-linuxq-x86-64.so.2 (GLIBC_PRIVATE) ==> /lib64/ld-linux-x86-64.so.2

解决方法

它看起来确实像 Lua 版本不匹配,并且给出了错误,它看起来像 LuaXML_lib 是针对 Lua 5.1 编译的(因为 luaL_register 出现在这里)。

这应该很容易确认:您可以运行 ldd /usr/local/lib/lua/5.3/LuaXML_lib.so 并检查 lua 库的输出。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?