luaopen_my_example在编译swig包装器后未定义

时间:2009-05-22 21:36:25

标签: lua wrapper swig

我现在只是潜入SWIG作为创建Lua绑定的手段,而且我遇到了障碍。我创建了我的接口文件并从中构建了一个共享对象文件,没有任何问题。但是,当我运行Lua并尝试要求共享对象时,我得到以下内容:

Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
 require("my_example")
 error loading module 'my_example' from file './my_example.so':

        ./my_example.so: undefined symbol: luaopen_my_example

堆栈追溯:

[C]: ?

[C]: in function 'require'

stdin:1: in main chunk

[C]: ?

我似乎无法在网上找到描述这种情况的任何内容,所以我想我会在这里发帖。那里有SWIG大师吗?我正在包装的课程是几千行(和专有)或我会在这里发布。

谢谢! :d

2 个答案:

答案 0 :(得分:1)

您使用的是什么版本的SWIG以及在哪个平台上?

我在Cygwin下运行的稍微陈旧的SWIG版本1.3.29使用#define SWIG_init深埋在其生成的包装文件中,以require指定luaopen_mod所需的名称mod其中%module 1}}是SWIG .i文件顶部的{{1}}语句中使用的名称。我包装的模块在Windows上加载并使用Lua 5.1。

您可能还需要做一些事情以确保符号被导出,并且没有被名称限制为Lua永远不会找到的C ++名称。我正在包装C结构和部分Windows API,因此没有处理该包装器中的任何C ++特定问题。但是,即使没有涉及SWIG,偶然的名称修改也是模块加载问题的常见原因。

答案 1 :(得分:1)

/捂脸

我在接口(.i)文件中输入了错误名称的模块。不管怎样,谢谢!