【发布时间】:2014-06-14 10:33:27
【问题描述】:
我正在尝试从 Python 代码构建独立应用程序。目前它只是一个“hello world”程序。我用 Cython 编译它得到一个 .c 文件:
"c:\python34\scripts\cython.exe" --embed hello.py
效果很好。然后我尝试编译和链接生成的.c文件如下:
"c:\mingw32\bin\gcc.exe" -I"c:\python34\include" -L"c:\python34\libs" -lpython34 -ohello.exe hello.c
这给了我很多链接错误:
...\cc7PmSei.o:hello.c:(.text+0xe9): 对 `_imp__PyTuple_New' 的未定义引用
...\cc7PmSei.o:hello.c:(.text+0x130): 对`_imp__PyBytes_FromStringAndSize'的未定义引用
...\cc7PmSei.o:hello.c:(.text+0x177): 对`_imp__PyModule_Create2'的未定义引用
...
...\cc7PmSei.o:hello.c:(.text+0x12b7): 对`_imp__PyUnicode_Decode'的未定义引用
...\cc7PmSei.o:hello.c:(.text+0x12dd): 对 `_imp__PyUnicode_FromStringAndSize' 的未定义引用
...\cc7PmSei.o:hello.c:(.text+0x1303): 对`_imp__PyBytes_FromStringAndSize'的未定义引用
.../libmingw32.a(main.o):main.c:.text.startup+0xa7): 未定义对 `WinMain@16' 的引用
collect2.exe:错误:ld 返回 1 个退出状态
更多信息:我有 Windows 7 Home 64 位操作系统。我使用 Python 3.4.1 32 位、Cython-0.20.1 和 TDM-GCC 4.7.1 32 位。
我做了一些研究。有人说它可能是由例如使用 32 位 C 编译器和 64 位 Python 引起的。但这里不是这样。其他 (http://eli.thegreenplace.net/2008/06/28/compiling-python-extensions-with-distutils-and-mingw/) 说我需要创建 libpython34.a。但是我的 Python 版本已经附带了这个文件。
有人知道我做错了什么吗?提前致谢。
【问题讨论】: