2016-01-22 48 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支持。 –