win32에서 작은 cython 모듈을 테스트하려고하는데 문제가 있습니다.Windows에서 gcc (mingw32) 명령 행에서 Cython 확장 기능 컴파일
파일은 linalg_cython.pyx 전화를 가지고있다 이러한 내용 :
from __future__ import absolute_import, division, print_function
import numpy as np
cimport numpy as np
import cython
#@cython.boundscheck(False)
#np.ndarray[np.float32]
#@cython.wraparound(False)
def L2_sqrd_float32(np.ndarray hist1, np.ndarray hist2):
""" returns the squared L2 distance
seealso L2
Test:
hist1 = np.random.rand(4, 2)
hist2 = np.random.rand(4, 2)
out = np.empty(hist1.shape, dtype=hist1.dtype)
"""
return (np.abs(hist1 - hist2) ** 2).sum(-1) # this is faster
L2_sqrd = L2_sqrd_float32
내가 setup.py를 사용하여이 컴파일을 얻을 수 있었다, 그러나 나는 설정에 의존해야하고 싶지 않아요. py를 사용하여 확장 기능을 빌드하십시오. 이것은 아직 cython 컴파일 프로세스를 완전히 이해하지 못했기 때문입니다. 나는 setup.py를 신뢰하기 전에 먼저 스스로 컴파일하려고합니다. 즉 내가 "setup.py build_ext"의 출력을보고 좋은 시작을 얻을 수 있었다 말했다되는 :
C:\MinGW\bin\gcc.exe -mdll -O -Wall^
-IC:\Python27\Lib\site-packages\numpy\core\include^
-IC:\Python27\include -IC:\Python27\PC^
-c vtool\linalg_cython.c^
-o build\temp.win32-2.7\Release\vtool\linalg_cython.o
writing build\temp.win32-2.7\Release\vtool\linalg_cython.def
C:\MinGW\bin\gcc.exe -shared \
-s \
build\temp.win32-2.7\Release\vtool\linalg_cython.o \
build\temp.win32-2.7\Release\vtool\linalg_cython.def \
-LC:\Python27\libs \
-LC:\Python27\PCbuild \
-lpython27 \
-lmsvcr90 \
-o build\lib.win32-2.7\vtool\linalg_cython.pyd
PYD 파일 생성이 작동 듯,하지만 내 목표는 그것을 만드는 단지가 아닌 이해된다 작업.
이 형식을 복사하고 (직접 시도하는 중) 저는 현재이 명령을 사용하여 모든 것을 수동으로 작성하고 있습니다.
C:\Python27\Scripts\cython.exe vtool\linalg_cython.pyx
C:\MinGW\bin\gcc.exe -mdll -O -DNPY_NO_DEPRECATED_API -Wall -Wno-unknown-pragmas
-Wno-format -Wno-unused-function -m32 -shared
-IC:\Python27\Lib\site-packages\numpy\core\include -IC:\Python27\include
-IC:\Python27\PC -IC:\Python27\Lib\site-packages\numpy\core\include
-LC:\Python27\libs -LC:\Python27\PCbuild -lpython27 -lmsvcr90 -o
vtool\linalg_cython.pyd -c vtool\linalg_cython.c
내 명령과 setup.py 명령의 주요 차이점은 내가 두 줄에 그것을 분할하는 대신 한 줄의 gcc를 호출하는 것을 시도하고 있다는 점이다. 나는 두 개의 명령으로 호출했을 것이다. 그러나 def 파일은 setup.py에 의해 자동 생성 된 것으로 보이고, 무엇이 그것들에 관한 것인지는 잘 모른다.
LIBRARY linalg_cython.pyd
EXPORTS
initlinalg_cython
하지만 난 두 단계로 내 명령을 분할하기 전에이 무엇인지에 대한 자세한 내용을 알고이 데프 자신을 파일을 자동 생성하고 싶습니다 :
그 내용은 간단 보인다. 어느 쪽이든 gcc에 대한 한 번의 호출로 .pyd를 생성 할 수 없습니까? 내가 올바른 장소에서으로 .pyd 파일을 얻을 수있어,하지만 난 그것을 가져 오려고하면 나는 86 있어야하는데
<type 'exceptions.ImportError'>: DLL load failed: %1 is not a valid Win32 application.
을 얻을 사용하고 명령으로
/x64 불일치, 왜 내가 플래그 -m32 추가 시도했다.요약 : 간단한 cython 모듈을 컴파일하려고 할 때 gcc 명령이 32/64 비트 오류를 표시합니다. 올바른 32 비트 pyd 파일을 생성하도록 gcc 명령을 수정하려면 어떻게합니까?