• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Pythonで、C言語のモジュールを利用したい!)

PythonでC言語のモジュールを利用する方法

このQ&Aのポイント
  • Pythonで利用できるモジュールを、C言語で作成したいと思っているのですが、方法が良くわかりません。
  • 現在、Windowsで、CygwinのGCCを用いて、C言語をコンパイルしています。GCCでコンパイル→DLLファイル作成→Pythonで利用?という大まかな流れかな~と思いまして、
  • import testmodule(あるいは、import testmodule.dll)とかやったのですが、ImportError: DLL load failed: 指定されたモジュールが見つかりません。と言われてしまいました。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

みようみまねってのが非常に気になるのですが、 #1の方が提示されたのでも良いですし Python インタプリタの拡張と埋め込み http://www.python.jp/doc/release/ext/ とかには目を通した上で作業されているのでしょうか? もっとも以下のページが簡潔にして必要最低限のことを まとめているようです 西尾泰和のブログ @ Cybozu Labs: Python拡張の作り方 http://labs.cybozu.co.jp/blog/nishio/2007/06/python.html あ、注意しておきますが、Python本体のコンパイルに使われた コンパイラと同じ物を使わないとだめですよ。 (cygwinの)gccを使いたいのなら、cygwinのパッケージにある Pythonが対象になります。 PythonのメインのページにあるWindows用の バイナリはVC++(7.1?)でないとダメです。 >ご教授お願いいたします。 こういう場合は教示を使います。

yamadeen
質問者

お礼

今更ですがありがとうございました。

yamadeen
質問者

補足

早速の回答ありがとうございます。 Python インタプリタの拡張と埋め込みは、ざっと読んでたのですが、DLLファイルの作り方とかで悩んでいたので、詳細はまだ読んでいませんでした。 お教えいただいた、西尾泰和のブログ @ Cybozu Labs: Python拡張の作り方を、よく読んでみようと思います。 >あ、注意しておきますが、Python本体のコンパイルに使われた >コンパイラと同じ物を使わないとだめですよ。 違うのを使ってました・・・ cygwinのPythonを使ってみます。 色々とありがとうございました。

その他の回答 (3)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

> コンパイラは、別に本体と同じものの必要はないです。 んなことはありません。 問題が出ない場合もありますが、一見わけのわからない誤動作が起きる可能性があるので、 コンパイラ(VC++の場合はバージョン)を同じものにしなければなりません。 python.orgで配布されている 2.5.4 の python25.dllのインポート先を見ると MSVCR71.dll 1E0ED1AC Import Address Table 1E1AB988 Import Name Table 0 time date stamp 0 Index of first forwarder reference と、VC7.1 のCライブラリランタイムを参照していますので、 別のランタイムの同名の関数を使ったりするとはまります。

yamadeen
質問者

お礼

今更ですがありがとうございました。

yamadeen
質問者

補足

回答ありがとうございます。 むぅ。私にはちょっと難しいですが、 西尾泰和のブログ @ Cybozu Labs: Python拡張の作り方 を参考にさせていただいて、すべてCygwin環境にて出来ました。 ありがとうございました。 因みにCygwin環境で作ったdllを、 CygwinではないPython標準リリースのプロンプトにてimportした際には、 固まってしまいました。 そういうところにも注意したいと思います。

  • rabbit_cat
  • ベストアンサー率40% (829/2062)
回答No.3

拡張子は、.dll じゃなくて .pyd にしないと駄目ですよ。 コンパイラは、別に本体と同じものの必要はないです。 ただし、呼び出し規約(cdll or Stdcall)を本体と合わせる必要があります。

yamadeen
質問者

お礼

今更ですがありがとうございました。

yamadeen
質問者

補足

回答ありがとうございます。 A No.2にある、 西尾泰和のブログ @ Cybozu Labs: Python拡張の作り方 のとおりにやったところ、出来たファイルは、dllファイルでした。 pydについても調べてみたいと思います。

noname#39970
noname#39970
回答No.1

良く読んでないけどこのあたりかなぁ? http://docs.python.org/ext/using-cobjects.html

yamadeen
質問者

お礼

今更ですがありがとうございました。

yamadeen
質問者

補足

早速の回答ありがとうございます。 C言語でPython.hをつけたり、ラッピングしてからでないと使用できないというのは分かったのですが、具体的なモジュールの生成方法とかがよく分かっておりません。(そもそもDLLファイルでよいのか?import "ファイル名"でよいのか?) そこらへんを経験のある方がおられましたら、よろしくお願いいたします。

関連するQ&A