在windows上编译疯狂的python

时间:2012-09-01 07:19:58

标签: python c lua

我正在尝试用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

1 个答案:

答案 0 :(得分:2)

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

如果您仍在努力让它发挥作用,我强烈建议您使用最近的一种叉子。特别是,Lunantic-Python fork at github包含了我的许多修复方法。

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

PyAPI_DATA(PyTypeObject) LuaObject_Type;

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

extern __declspec(dllimport) PyTypeObject LuaObject_Type;

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

另请注意,Lua5.1中不推荐使用luaopen_loadlib,这解释了您获得的其他未定义引用。实际上,lunatic-python对以下内容的使用都已被弃用:

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

应该替换为:

luaL_openlibs(L);
相关问题