Cythonのコンパイルができません。
次のCythonのドキュメントを参考にしながら、簡単なCythonコードを作り(.pyx)、コンパイルを試みましたが、『:hello.c:(.text+0x1721): undefined reference to `_imp__PyErr_Format'』というようなエラーが複数行出て.pydファイルができません。
ご教示をお願いいたします。
http://omake.accense.com/static/doc-ja/cython/src/quickstart/build.html
『python setup.py build_ext --inplace』を行うと、次のファイルは生成されます。
hello.c
build> temp.win-amd64-2.7> Release> hello.def
build> temp.win-amd64-2.7> Release> hello.o
次の記事の方法も見たのですが、上手くいきませんでした。
https://stackoverflow.com/questions/6985109/how-to-compile-c-code-from-cython-with-gcc
環境は次の通りです。
windows 10 Pro/ 64bit
Python 2.7.14 ([MSC v.1500 64 bit (AMD64)] on win32)
Cython version 0.27.3
gcc 6.3.0
C:\Python27\libs\libpython27.a は存在しています。
環境変数(python系のパス):
PATH: c:\mingw\bin;C:\Python27;C:\Python27\Scripts
(PYTHONPATHは設定していません)
今回、Cythonのために追加でインストールしたものは、Cythonとgcc(MinGW)になります。
他に必要なモジュールなどありますでしょうか。
以上、よろしくお願いいたします。
==========追記です==========
今回使用したコードは次の通りです。
[setup.py]
#! -*- coding: utf-8 -*-
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [Extension("hello", ["hello.pyx"])]
setup(
name = 'Hello world app',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules
)
[hello.pyx]
def say_hello_to(name):
print("Hello %s!" % name)
上記二つのファイルを、同じフォルダ内に作り、cmdでそのディレクトリに移動し、『python setup.py build_ext --inplace』を行いました。
Cythonのドキュメント通りに作ったつもりですが、ご確認をお願いいたします。
(*上記追記内容を、回答欄に乗せてしまっていたのを、修正しました。ご迷惑をおかけいたしました。)
==========追記2==========
下記サイトを参考に、2つの方法を試してみました。
https://stackoverflow.com/questions/35707191/compiling-pyx-files
gcc -shared -Wall -O3 -I Python27/include -L Python27/libs -o fib.so fib.c -l python27
を使う方法
上記コマンドを一部修正し、gcc -shared -Wall -O3 -I C:\Python27\include -L C:\Python27\libs -o hello.pyd hello.c -l C:\Python27\libs\libpython27.a
のようにしてみたところ、c:/mingw/bin/../lib/gcc/mingw32/6.3.0/../../../../mingw32/bin/ld.exe: cannot find -lC:\Python27\libs\libpython27.a collect2.exe: error: ld returned 1 exit status
と表示されました(※C:\Python27\libs\libpython27.aは存在しているのですが。。)
gcc -shared -Wall -O3 -I C:\Python27\include -L C:\Python27\libs -o hello.pyd hello.c -l python27
だと、最初と同じエラーのundefined reference to _imp__PyErr_SetString
が表示されます。setup.pyを使う方法
setup.pyをリンク先の回答のように書き直し、python setup.py build_ext --inplace
をすると下記のエラーが出ました。(今まででてこなかったエラーです)running build_ext
building 'hello' extension
c:\mingw\bin\gcc.exe -mdll -O -Wall -IC:\Python27\include -IC:\Python27\PC -c hello.cpp -o build\temp.win-amd64-2.7\Release\hello.o
In file included from c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\math.h:36:0,
from C:\Python27\include/pyport.h:325,
from C:\Python27\include/Python.h:58,
from hello.cpp:17:
c:\mingw\lib\gcc\mingw32\6.3.0\include\c++\cmath:1157:11: error: '::hypot' has not been declared
using ::hypot;
^~~~~
error: command 'c:\mingw\bin\gcc.exe' failed with exit status 1一応、"hello.cpp"はできていますが、buildフォルダの中は空っぽです。
以上、進捗のご報告となります。