在使用Lua 5.1.5调用'require("lsqlite3")'时遇到了'SIGSEGV'错误。

我已经构建了lua 5.1.5和lsqlite3-0.8.1,并且它们在我的RedHat Linux上运行良好。然后我将它们移植到我的MIPS开发板上。lua和其他模块(例如luafilesystem、md5、cgilua和wsapi)都运行良好。但是lsqlite3无法正常工作。

当我在lua命令行中执行require("lsqlite3")时,它返回以下错误消息:

lua

Lua 5.1.5版权所有(C)1994-2012 Lua.org,PUC-Rio

require("lsqlite3") do_page_fault()#2:从00000000(epc == 00000000,ra == 2ac36144)向lua发送SIGSEGV以进行无效读取访问 分段错误

有人可以给我一些帮助来解决这个问题吗?谢谢!

在解决这个问题方面,我取得了一些进展,我使用gcc编译选项'-Wl,-E'重新构建了LUA,然后重新构建了lsqlite3。我在lua命令行中执行了require("lsqlite3"),并且没有打印任何消息。我继续运行一些其他数据库操作命令,并发现它们都成功执行了。看起来问题已经解决了,我应该对此感到非常高兴。

但是出现了另一个更奇怪的问题。

如果我将语句require("lsqlite3")放入文件中,然后以这种方式执行文件:

lua文件

它仍然打印错误消息,例如:

do_page_fault()#2:从2ada054c(epc == 2ada054c,ra == 2abdceac)向lua发送SIGSEGV以进行无效读取访问

如果我在文件中放置更多的数据库操作语句,然后通过lua运行此文件。Lua可以正确返回查询操作的结果并正确地将值插入表中,但始终打印上述错误消息。

如果我在lua命令行界面中逐个运行文件中的语句,它永远不会打印此错误消息。

它似乎在执行'require'函数时出现了错误消息。但是,如果我将require("lfs")放入文件中并通过lua运行这个文件,它永远不会打印错误消息。

我困惑的是lua命令行执行和lua脚本之间的区别是什么。

点赞
用户33252
用户33252

lsqlite3.c 中有三个地方使用了 sqlite_int64(从未直接使用 long long)。当您构建 sqlite3 时,某种类型会被用于 64 位整数;通过包含 sqlite3.h 中的该类型的定义,lsqlite3 将使用相同的类型。

2012-10-06 15:59:16