C++ 项目中加载外部 Lua 模块(luasql.postgres)出错
2019-7-18 10:31:35
收藏:0
阅读:85
评论:0
我需要编写一个 C++ 项目和一个 Lua 脚本,从 PostgreSQL 中读取信息并将接收到的数据返回给 C++ 项目。 当我从终端使用 Lua 解释器调用它时,它可以正常工作,但当我尝试从 C++ 中调用 Lua 模块时,脚本工作不正确并返回错误。
Home OS - Debian 9。 PostgreSQL 版本 - 9.6。 编译器 - g++。 Lua 版本 - 5.3.4。 我已经尝试在 Lua 文件中更改尝试不同的 *.so 文件,但这并没有帮助。
编译器/链接器标志:
g++ -c -m64 -pipe -g -std=gnu++11 -Wall -W -fPIC -DQT_QML_DEBUG -I. -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -o main.o
g++ -m64 -o luaTest main.o -llua -ldl
main.cpp
lua_State* _script = luaL_newstate();
if (_script == NULL) {
std::cout << "无法分配内存!\n";
return -1;
}
int result = luaL_loadfile(_script, filename1);
if (result != LUA_OK) {
std::cout << "无法加载文件!\n";
return -1;
}
luaL_openlibs(_script);
result = lua_pcall(_script, 0, 0, 0);
if (result != LUA_OK) {
std::string luaError = lua_tostring(_script, -1);
std::cout << "无法运行脚本!\n" << luaError << '\n';
return -1;
}
lua:
package.cpath = "/usr/lib/x86_64-linux-gnu/liblua5.3-sql-postgres.so"
function getDatabase()
driver = require "luasql.postgres"
env = assert(driver.postgres())
connect = assert(env:connect("luabase", "sorokin", "123456", "127.0.0.1", "5432"))
res = connect:execute("DROP SEQUENCE user_ids")
res = connect:execute("DROP TABLE users")
res = assert(connect:execute("CREATE TABLE users(\
id INTEGER PRIMARY KEY ,\
fname CHAR(15),\
lname CHAR(30),\
job CHAR(15)\
)"))
res = assert(connect:execute("INSERT INTO users(id, fname, lname, job) \
VALUES (1, 'Andrey', 'Sedin', 'Deputat')"))
res = assert(connect:execute("INSERT INTO users \
VALUES (2, 'Andrey', 'Dranga', 'Boxer')"))
res = assert(connect:execute("INSERT INTO users \
VALUES (3, 'Roberto', 'Ierusalimskiy', 'Programmer')"))
cursor = assert(connect:execute("SELECT * FROM users ORDER BY lname"))
print()
print(string.format("%1s %-16s %-31s %-16s",
"#", "| FNAME", "| LNAME", "| JOB"))
print(string.format("%1s %-16s %-31s %-16s",
"-", "| -----", "| -----", "| ---"))
row = cursor:fetch({}, "a")
while row do
print(string.format("%1s %1s %-15s%1s %-30s%1s %-15s",
row.id, "|", row.fname, "|", row.lname, "|", row.job))
row = cursor:fetch(row, "a")
end
print()
cursor:close()
connect:close()
env:close()
end
getDatabase()
来自 Lua 脚本的错误消息:
从文件'/usr/lib/x86_64-linux-gnu/liblua5.3-sql-postgres.so'加载模块'luasql.postgres'时出错: /usr/lib/x86_64-linux-gnu/liblua5.3-sql-postgres.so:未定义的 符号: lua_settop
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 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 代码?
