我现在只是潜入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 回答
您使用的是什么版本的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,意外名称修改也是模块加载问题的常见原因 .
/捂脸
我在接口(.i)文件中输入了错误名称的模块 . 不管怎么说,还是要谢谢你!