2

我正在尝试使用 minigw 在 Windows 上编译疯狂的 python。命令如下:

 gcc.exe -shared -DLUA_BUILD_AS_DLL src\luainpython.c src\pythoninlua.c liblua.a
 libpython27.a -IC:\Python27\include -IC:\LUA\include 

这给了我未定义的参考错误。但是我找不到任何 lua api 更改参考,我应该用什么来替换这些。

src\luainpython.c:350:14: warning: 'LuaObject_Type' redeclared without dllimport
attribute after being referenced with dll linkage [enabled by default]
C:\Users\Wiz\AppData\Local\Temp\cccm0nAN.o:luainpython.c:(.text+0x7a): undefined
     reference to `lua_strlen'
C:\Users\Wiz\AppData\Local\Temp\cccm0nAN.o:luainpython.c:(.text+0x557): undefine
    d reference to `_imp__LuaObject_Type'
C:\Users\Wiz\AppData\Local\Temp\cccm0nAN.o:luainpython.c:(.text+0xc3a): undefine
    d reference to `luaL_getn'
C:\Users\Wiz\AppData\Local\Temp\cccm0nAN.o:luainpython.c:(.text+0x1036): undefin
    ed reference to `luaopen_loadlib'
c:/mingw32/bin/../lib/gcc/i686-w64-mingw32/4.7.1/../../../../i686-w64-mingw32/bi
    n/ld.exe: C:\Users\Wiz\AppData\Local\Temp\cccm0nAN.o: bad reloc address 0x0 in s
    ection `.data'
collect2.exe: error: ld returned 1 exit status
4

1 回答 1

2

最初的 Lunatic-Python 代码库有许多已知问题——您在上面遇到的构建问题就是其中之一。不幸的是,原作者似乎仍在维护这个项目——如果这里的最后修改日期有任何迹象的话。

如果您仍在尝试使其正常工作,我强烈建议您使用最新的分叉之一。特别是,github 上的 Lunantic-Python 分支包含了我的许多修复改进。

回到您的问题,许多未定义的引用是由于标头中不正确的前向声明或由于定义的宏导致前向声明不正确。例如,原件luainpython.h包含:

PyAPI_DATA(PyTypeObject) LuaObject_Type;

在 Windows 中,经过预处理后,它会扩展为:

extern __declspec(dllimport) PyTypeObject LuaObject_Type;

换句话说,链接器将尝试LuaObject_Type从导入库中找到 的定义。这当然是错误的,因为新类型是由 lunatic in 创建和实现的luainpython.c。应该是正确的原型extern PyTypeObject LuaObject_Type;

另请注意,luaopen_loadlibLua5.1 中已弃用它,它解释了您获得的其他未定义引用。事实上,lunatic-python 对以下内容的使用都已被弃用:

luaopen_base(L);
luaopen_table(L);
luaopen_io(L);
luaopen_string(L);
luaopen_debug(L);
luaopen_loadlib(L);

应该用这个代替:

luaL_openlibs(L);
于 2013-04-15T10:11:27.537 回答