swig包装器编译后,luaopen_my_example未定义。

我现在只是深入了解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

原文链接 https://stackoverflow.com/questions/900098

点赞
stackoverflow用户68204
stackoverflow用户68204

你正在使用哪个版本的 SWIG 并在哪个平台上使用?

我使用略旧的版本 1.3.29 的 SWIG 在 Cygwin 下运行,它在生成的包装文件中使用 #define SWIG_init 来深度设置 require 所需的名称,即 luaopen_mod,其中 mod 是 SWIG .i 文件顶部的 %module 语句中使用的名称。我包装的模块在 Windows 上加载并与 Lua 5.1 正常工作。

您可能还需要执行一些操作,以确保符号已导出,且未作为 C++ 名称进行名称重载,否则它永远无法被 Lua 找到。我正在包装 C 结构体和部分 Windows API,因此没有在这个包装器中处理任何 C++ 特定问题。然而,即使没有 SWIG 的干预,意外的名称重载也是模块加载问题的常见原因。

2009-05-23 02:54:26
stackoverflow用户109549
stackoverflow用户109549

我在接口文件(.i文件)中将模块命名错误。不管怎样,谢谢! /facepalm

2009-05-26 14:15:43