luaopen_my_示例编译swig包装后未定义
我现在正潜入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 Lua 5.1.4版权所有(C)1994-2008 Lua.org,临市局里约 要求(“我的例子”) 从文件加载模块“my_example”时出错。/my_example.so': ./my_example.so:未定义符号:luaopen_my_example 堆栈回溯: [C]: ? [C]: in function 'require' stdin:1: in main chunk [C]: ? [C] :? [C] :在函数“require”中 stdin:1:在主块中 [C] :? 我似乎在网上找不到任何描述这种情况的东西,所以我想我应该在这里发布。有没有SWIG大师?我正在包装的类有几千行长(并且是专有的),或者我会在这里发布它luaopen_my_示例编译swig包装后未定义,lua,wrapper,swig,Lua,Wrapper,Swig,我现在正潜入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_
谢谢D您使用的是什么版本的SWIG,在什么平台上 我在Cygwin下运行的稍显陈旧的SWIG版本1.3.29在其生成的包装文件中使用了
#define SWIG_init
,将require
需要的名称指定为luaopen_mod
,其中mod
是SWIG顶部的%module
语句中使用的名称文件我包装的模块在Windows上加载并使用Lua5.1
您可能需要做一些事情来确保符号被导出,而不是名称被标记为一个永远不会被LUA发现的C++名字。我在包装C结构和部分Windows API,所以没有处理那个包装器中的任何C++特定问题。然而,即使不涉及SWIG,意外名称损坏也是模块加载问题的常见原因。
/facepalm
我在接口(.I)文件中错误地命名了模块。无论如何谢谢你