我现在只是潜入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
答案 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)文件中输入了错误名称的模块。不管怎样,谢谢!