【问题标题】:luaopen_my_example undefined after compiling swig wrapperluaopen_my_example 在编译 swig 包装器后未定义
【发布时间】:2010-10-28 08:35:08
【问题描述】:

我刚刚深入研究 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

【问题讨论】:

    标签: lua wrapper swig


    【解决方案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,意外的名称修改也是模块加载问题的常见原因。

    【讨论】:

      【解决方案2】:

      /掌心

      我在接口 (.i) 文件中错误命名了模块。还是谢谢!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多