1

我刚刚潜入 SWIG 作为创建 Lua 绑定的一种方法,但遇到了障碍。我制作了我的接口文件并从中构建了一个共享对象文件,没有任何问题。但是,当我运行 Lua 并尝试请求共享对象时,我得到以下信息:

Lua 5.1.4 版权所有 (C) 1994-2008 Lua.org, PUC-Rio
 要求(“我的例子”)
 从文件“./my_example.so”加载模块“my_example”时出错:

        ./my_example.so:未定义符号:luaopen_my_example

堆栈回溯:

[C]: ?

[C]:在函数“要求”中

标准输入:1:在主块中

[C]: ?

我似乎在网上找不到任何描述这种情况的东西,所以我想我会在这里发帖。那里有 SWIG 大师吗?我要包装的课程有几千行(并且是专有的),或者我会在这里发布。

谢谢!:D

4

2 回答 2

1

您使用的是什么版本的 SWIG,在什么平台上?

我在 Cygwin 下运行的稍微过时的 SWIG 版本 1.3.29 使用#define SWIG_init深埋在其生成的包装文件中来指定所需的名称,require因为SWIG文件顶部的语句中使用的名称在luaopen_mod哪里。我包装的模块确实可以在 Windows 上加载和使用 Lua 5.1。mod%module.i

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

于 2009-05-23T02:54:26.150 回答
1

/掌脸

我在接口 (.i) 文件中错误命名了模块。不管怎么说,还是要谢谢你!

于 2009-05-26T14:15:43.443 回答