2016-01-22 50 views
2

我正尝试在cython中创建一个可执行文件,遵循以下指示: Making an executable in Cython。 不过,我不断收到错误“未定义的引用‘的WinMain @ 16’collect2.exe,我很好奇地想知道这种情况的原因是什么从Cython代码创建可执行文件

编辑:

我目前在做下面的事情用下面用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 \包括-LC:\ Python34 \库setup.c中-lpython34 -o example.exe

而且我得到的错误是:

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

谢谢亲切!

+0

看看是否适用,http://stackoverflow.com/questions/5259714/undefined-reference-to-winmain16和/或尝试添加例如'-mconsole'编译标志。 –

+0

我试过,但它没有工作:( – littlebluedeer

+0

我认为你应该编辑你的问题,并把你想要做的更详细的,比如用于编译和链接的命令,也使用了cython命令 –

回答

0

以下命令编译您用Cython程序

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

这是使用gcc 4.9.1和5.3.0版本的64位(Win32的线程,SEH异常处理)在Windows 7完成64 msys2环境和64位蟒蛇3.4。

我最初的想法是会有由于缺少的main()用Cython默默地加一的问题。

+0

你的建议是什么操作系统,你使用的,偶然?因为它告诉我,行选项“-municode”不存在 – littlebluedeer

+0

它仍然不工作 – littlebluedeer

+0

@smallfacebigmouth我没有注意到你有相当老的编译器ie 4.8.1。我认为在使用Python 3.4时它是一个糟糕的匹配,因为它没有'-municode'像更新的版本。* python --embed *生成需要的代码来自编译器的unicode支持。 –