私はcythonでいくつかのPython拡張モジュールを書いています。私が書いた拡張機能はビルドされ、うまく機能します。次に、numpy配列にアクセスするときに、型付きのmemoryviewsを使用したいと思いました。これは、いくつかの利点があるように思われるためですhttp://docs.cython.org/src/userguide/memoryviews.html
ただし、cythonコードでmemoryviewを使用するとすぐに、拡張機能のビルド時にエラーが発生します。たとえば、このテスト行を追加すると、次のようになります。
cdef double [:、:: 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
この投稿で提案されているように、gcc行に-march = i486を追加しようとしました: sync_fetch_and_add_4への未定義の参照です が、問題は解決しませんでした。さらに言えば、-march=i586と-march=pentiumも試しましたが成功しませんでした。
ここで何が起こっているのか分かりますか?
私のプラットフォームはWindows7、mingwバージョンは4.70、Cythonバージョンは0.17.1です。
ありがとう