首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lua脚本调用C共享库的最佳方式?

Lua脚本调用C共享库的最佳方式?
EN

Stack Overflow用户
提问于 2010-11-12 06:25:13
回答 2查看 2.3K关注 0票数 5

我来自更多的Python background...and,我正试图找到从Lua脚本调用标准C共享库的最佳方法。

我听说过“异形”(http://alien.luaforge.net/),但不知道它有多流行?意味着它是定期更新的?

例如,我知道它们是一个SQLIte Lua库,但是假设我想调用在编译SQLite时创建的SQLite共享库?

因此,例如:在我的示例中,lib位于/usr/local/lib/libsqlite3.so

如果我写一个小的虚拟脚本,看看它是否能加载lib

代码语言:javascript
复制
require "libsqlite3"

print "hello"

我得到以下错误:

代码语言:javascript
复制
debian@debian:~/Desktop/SQLite Test$ lua sqlite_test.lua
lua: error loading module 'libsqlite3' from file '/usr/local/lib/lua/5.2/libsqlite3.so':
    /usr/local/lib/lua/5.2/libsqlite3.so: undefined symbol: luaopen_libsqlite3
stack traceback:
    [C]: in ?
    [C]: in function 'require'
    sqlite_test.lua:1: in main chunk
    [C]: in ?
debian@debian:~/Desktop/SQLite Test$ 

这是否意味着Lua不能“公开”共享库,而我必须使用类似“异形”的东西?

我知道我也可以用这样的方式编写共享库,它包括Lua头文件,我可以制作"Lua函数“,...I只是希望我能调用框上的”标准“共享库。

如能提供帮助或建议,将不胜感激;)

谢谢

林顿

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-12 06:31:25

Lua不能立即调用C库。它不随libffi一起发布,因此不像ctype那样工作。

历史上,lua嵌入到一个应用程序中,该应用程序将向lua表添加所需的函数,并提供lua堆栈操作以传递和返回参数。

外星人是一种利布菲的适应,并将工作。

票数 4
EN

Stack Overflow用户

发布于 2010-11-12 11:28:52

正如Yann所说,Lua在默认情况下不能调用C库。通常的做法是通过创建绑定库来公开想要的API。有几个地方可以查找Lua的现有库绑定,比如维基LuaRocksLuaDist

如果不存在绑定,可以尝试使用外星人直接使用libffi绑定到C库。

对于您的示例- Sqlite3,至少有两个绑定:

  • 泛型SQL绑定- LuaSql,提供绑定到Sqlite3,MySQL,Oracle.
  • 专用绑定- 3
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4162161

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档