【问题标题】:Creating an executable from Cython Code从 Cython 代码创建可执行文件
【发布时间】:2016-04-28 11:19:49
【问题描述】:

我正在尝试按照此处的说明在 cython 中创建可执行文件: Making an executable in Cython。 但是,我不断收到错误“未定义对 'WinMain@16' collect2.exe 的引用,我很想知道这是什么原因。

编辑:

我目前正在使用以下 Cython 文件执行以下操作:

cpdef primes(int kmax):
cdef int n, k, i
cdef int p[1000]
result = []
if kmax > 1000:
    kmax = 1000
k = 0
n = 2
while k < kmax:
    i = 0
    while i < k and n % p[i] != 0:
        i = i + 1
    if i == k:
        p[k] = n
        k = k + 1
        result.append(n)
    n = n + 1
return result
  1. 通过命令行运行命令:

cython primes.pyx --embed

gcc -DMS_WIN64 -mthreads -mconsole -Wall -O -IC:\Python34\include -LC:\Python34\libs setup.c -lpython34 -o example.exe

我得到的错误是:

"c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../libmingw32.a(main.o):(.text.startup+0xa7) : 对 `WinMain@16' 的未定义引用"

谢谢!

【问题讨论】:

  • 看看这是否适用,stackoverflow.com/questions/5259714/… 和/或尝试添加例如-mconsole 编译标志。
  • 我试过了,但也没有用:(
  • 我认为您应该编辑您的问题,并更详细地说明您要执行的操作,例如用于编译和链接的命令。还使用了 cython 命令。
  • @J.J.Hakala。谢谢你。我刚刚编辑了它。
  • 您的 .pyx 文件中有名为 main() 的方法吗?

标签: python compilation executable cython


【解决方案1】:

以下命令编译了你的 cython 程序

gcc -municode -DMS_WIN64 -O -Wall -I /c/devel/Python34/include -L /c/devel/Python34/libs/ primes.c -lpython34 -o example.exe

这是在 windows 7 64 位 msys2 环境中使用 gcc 4.9.1 和 5.3.0 64 位版本(win32 线程、SEH 异常处理)和 64 位 python 3.4 完成的。

我最初的想法是,由于缺少 main() 会出现问题,但是 cython 默默地添加了一个。

【讨论】:

  • 感谢您的建议。您使用的是什么操作系统,也许?因为它告诉我行选项“-municode”不存在
  • @smallfacebigmouth 我没有注意到你有相当旧的编译器,即 4.8.1。我认为在使用 Python 3.4 时这是一个糟糕的匹配,因为它没有 -municode 像新版本那样。 python --embed 生成需要编译器支持 unicode 的代码。
  • 是的,我也注意到了这一点。我通过忽略 -municode 以及当从 Cython 生成 .c 文件时将“wmain”替换为“main”来解决这个问题。成功了
猜你喜欢
  • 1970-01-01
  • 2023-03-27
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-14
相关资源
最近更新 更多