首页 文章

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

提问于
浏览
1

我现在只是潜入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 回答

  • 1

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

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

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

  • 1

    /捂脸

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

相关问题