我一直在寫一些Python擴展模塊與用Cython。我編寫的擴展可以編譯並且工作良好。於是,我想用類型化memoryviews,訪問我的numpy的陣列時,他們看起來那麼我用memoryview我用Cython代碼構建擴展時,我會得到一個錯誤有如下幾個優點http://docs.cython.org/src/userguide/memoryviews.html用Cython:memoryview建立自己的錯誤使用MinGW
然而,一旦。例如,如果我添加此測試線:
CDEF雙[:, :: 1] X = np.zeros((100,100))
到現有的,工作用Cython擴展。我會得到以下錯誤:
C:\MinGW\bin\gcc.exe -shared -s build\temp.win32-2.7\Release\image_box.o build\temp.win32-2.7\Release\image_box.def -Lc:\python27\libs -Lc:\python27\PCbuild -lp
ython27 -lmsvcr90 -o x:\ARframework\python\image_ops\image_box.pyd
build\temp.win32-2.7\Release\image_box.o:image_box.c:(.text+0xe23): undefined reference to `___sync_fetch_and_add_4'
build\temp.win32-2.7\Release\image_box.o:image_box.c:(.text+0x3318): undefined reference to `___sync_fetch_and_add_4'
build\temp.win32-2.7\Release\image_box.o:image_box.c:(.text+0x4c81): undefined reference to `___sync_fetch_and_sub_4'
build\temp.win32-2.7\Release\image_box.o:image_box.c:(.text+0x4d37): undefined reference to `___sync_fetch_and_sub_4'
build\temp.win32-2.7\Release\image_box.o:image_box.c:(.text+0x10767): undefined reference to `___sync_fetch_and_sub_4'
build\temp.win32-2.7\Release\image_box.o:image_box.c:(.text+0x10793): undefined reference to `___sync_fetch_and_sub_4'
collect2.exe: error: ld returned 1 exit status
error: command 'gcc' failed with exit status 1
我試圖-march = 1486增加了一行gcc,因爲在這篇文章建議: undefined reference to sync_fetch_and_add_4 但這並沒有解決問題。對於這個問題,我也試過-march = i586和-march = pentium沒有成功。
任何想法這裏發生了什麼?
我的平臺是Windows 7,MinGW的版本是4.70,用Cython版本是0.17.1
感謝
如果你使用,你必須適應新的或變化的方法。 def文件。這是最常被忽視的。只有在沒有'build \ temp.win32-2.7 \ Release \ image_box.o build \ temp.win32-2.7 \ Release \ image_box.def'的情況下才能進行測試。 –
我不知道我明白你的意思。我已刪除的構建\ temp.win32-2.7 \發佈\ image_box.o構建\ temp.win32-2.7 \發佈\ image_box.def並嘗試重新建立延伸和問題仍然 – martinako
嘗試建立與'C:\ MinGW的\ BIN \ gcc.exe -shared -s建立\ temp.win32-2.7 \發佈\ image_box.o -Lc:\ python27 \庫-Lc:\ python27 \ PCbuild -lp' –