mingwでのリンクエラーについて

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,941

kohekoh

score 131

cythonを動かしたいと思って
mingwをインストールしたのですが
そこでつまってしまいました

開発環境はanacondaで 、windows10です
python3系で動かせればうれしいです

pythonでcythonのsetup.pyを実行しようとすると

python setup.py build_ext --inplace

-------------------------------------------------------
実行結果

running build_ext
skipping 'cythonfn.c' Cython extension (up-to-date)
building 'calculate' extension
C:\MinGW\bin\gcc.exe -mdll -O -Wall -DMS_WIN64 "-IC:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\include" "-IC:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\include" -c cythonfn.c -o build\temp.win-amd64-3.6\Release\cythonfn.o
In file included from C:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\include/Python.h:65:0,
                 from cythonfn.c:4:
C:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\include/pytime.h:112:5: warning: 'struct timeval' declared inside parameter list
     _PyTime_round_t round);
     ^
C:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\include/pytime.h:112:5: warning: its scope is only this definition or declaration, which is probably not what you want
C:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\include/pytime.h:117:5: warning: 'struct timeval' declared inside parameter list
     _PyTime_round_t round);
     ^
writing build\temp.win-amd64-3.6\Release\calculate.cp36-win_amd64.def
C:\MinGW\bin\gcc.exe -shared -s build\temp.win-amd64-3.6\Release\cythonfn.o build\temp.win-amd64-3.6\Release\calculate.cp36-win_amd64.def "-LC:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\libs" "-LC:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\PCbuild\amd64" -lpython36 -lmsvcr140 -o "C:\Users\ユーザ名\Dropbox\prg\make_tips\calculate.cp36-win_amd64.pyd"
c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: C:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\libs/python36.lib(python36.dll): Recognised but unhandled machine type (0x8664) in Import Library Format archive
C:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\libs/python36.lib: error adding symbols: File format not recognized
collect2.exe: error: ld returned 1 exit status
error: command 'C:\\MinGW\\bin\\gcc.exe' failed with exit status 1


また、動かしたいプログラムを以下に示します

setup.py

# -*- coding: utf-8 -*-

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

# for notes on compiler flags e.g. using
# export CFLAGS=-O2
# so gcc has -O2 passed (even though it doesn't make the code faster!)
# http://docs.python.org/install/index.html

ext_modules = [
    Extension( "calculate", ["cythonfn.pyx"] ),
]

setup(
    name = "sample calculate app" ,
    cmdclass={'build_ext': build_ext },
    ext_modules = ext_modules,
)

-------------------------------------------------------------------------
cythonfn.pyx

# -*- coding: utf-8 -*-

def calculate_z(maxiter, zs, cs):
    """Calculate output list using Julia update rule"""
    output = [0] * len(zs)
    for i in range(len(zs)):
        n = 0
        z = zs[i]
        c = cs[i]
        while n < maxiter and abs(z) < 2:
            z = z * z + c
            n += 1
        output[i] = n
    return output

調べているとこれがリンクエラーのようなのですが
どう改善していいかわかりません
よろしくお願いします

ちなみに
http://www.geocities.jp/penguinitis2002/computer/programming/Python/cython/cython.html

このサイトにライブラリのリンクのつなぎ方が書いてあるのですが
どうしていいのかがわかりません

-------------追記----------------
minwgのインストール方法

http://web.plus-idea.net/2014/06/mingw-install-2014/

このサイトの通りに実行しました
最後のgcc --versionで確認することができたので
インストールはうまくいっていると思います
しかし、32bitか64かはわかっていません

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • pashango2

    2017/07/12 13:20

    エラーは全て載せたほうがよいです、またsetup.pyと.pyxも載せたほうがよいです。

    キャンセル

  • can110

    2017/07/12 13:45

    mingwのインストール手順も追記ください。(32or64bit版?)

    キャンセル

回答 2

checkベストアンサー

+1

インポートライブラリが無いのではないでしょうか。

conda install libpython

を実行してみてください

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/12 18:19

    わかりました
    やってみます!
    ありがとうございます!

    キャンセル

  • 2017/07/12 19:47

    できました!
    ありがとうございます!

    キャンセル

  • 2017/07/12 22:04

    おー良かった
    もしかすると
    (anacondaのインストールフォルダ)/Lib/distutils/distutils.cfg
    にデフォルト設定として
    [build]
    compiler=mingw32
    が記述されているかもしれませんので、確認・修正しておくことをお勧めします。
    おつかれさまでした

    キャンセル

0

エラーメッセージRecognised but unhandled machine type (0x8664) in Import Library Format archiveで検索すると、以下がヒットしました。
MinGW, linking to a dll on Windows
上記によると、32bit版MinGWで発生するエラーのようです。

また、参考にされているページにもMSYS2 64 bit (MinGW w64)と記載されているので64bit版MinGWのインストールが必要だと思われます。
参考:MinGW 64 bit 版 のセットアップ

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/07/12 16:49

    できません…

    キャンセル

  • 2017/07/12 18:47

    sourceforgeにも複数のIsuueあがっているとおり、mingw-w64のインストーラは環境によってはうまく動作しないようですね…
    magichanさんのアドバイスのとおり、ビルドツールにMSVCを使った方がよいかもしれません。

    キャンセル

  • 2017/07/12 19:17

    なるほど…
    わかりました
    ありがとうございます

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る