• ベストアンサー

pythonを使うときのビルド方法

C++(C)からPythonスクリプトを使う場合、 逆にPythoスクリプトからC++(C)の関数を呼び出す場合の C++(C)のビルド方法を教えてください。 (プログラミングではなくてビルド方法です) 環境は Visual Studio 2005 です。 Boost::pythonは使わない方法でお願いします。

  • Python
  • 回答数2
  • ありがとう数3

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

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

えーと、まずビルドの手順。 例示したURLから辿れるところで 4.3 DLL 使用の実際 に Windows で DLL を作成する際は、pythonXY.lib をリンカに渡さねばなりません。 例えば二つの DLL 、spam と ni (spam の中には C 関数が入っているとします) をビルドするには、以下のコマンドを実行します: cl /LD /I/python/include spam.c ../libs/pythonXY.lib cl /LD /I/python/include ni.c spam.lib ../libs/pythonXY.lib という記述があります。 実際にPythonインタプリタから importするには 作成したDLLモジュールの拡張子が .pyd でなければならない ことに注意してください。 あるいは#1の補足をみると自力でたどり着いているかもしれませんが、 ソースツリーの PC\example_nt というディレクトリに(2003用ですが) 2006/05/30 06:58 340 example.c 2004/12/29 23:15 882 example.sln 2006/04/23 00:19 5,083 example.vcproj 2006/03/01 15:28 6,743 readme.txt というのがありますので、これを適当にいじるというのも ありでしょう(IDEを使いたいのなら)。 次に自分のC/C++プログラムからPythonインタプリタを 呼び出してスクリプトを実行させる場合ですが cl /MD /Ic:/python25/include myapp.c -o myapp.exe c:/python25/libs/python25.lib こんな感じになります。 スクリプトを読み込ませるのには PyRun_SimpleFile 等が使えます。 最後に補足にある内容についてですが 見つからないというエラーになっているのは すべてPython.hをincludeすれば解決できるはずです。 が、Python.hが見つからないというエラーにはなっていないようなので ひょっとしたらPython.hのあとに取り込んでいる #include "stdafx.h" でなにかつじつまの合わないマクロ定義があるのかもしれません。 拡張モジュールでMFCを使うときとかいうのを どこかで見たような記憶があるので、 何か調整がいるのかもしれません。 とりあえずPythonインタプリタには TCHAR の世界を 見せない方がいいと思うので、 #include "Python.h" int main(int argc, char* argv[]){ Py_Initialize(); PyRun_SimpleString("print 'Hello, Python'"); Py_Finalize(); return 0; } でやってみてはどうでしょう? まだエラーになりますか?

yasuch
質問者

お礼

回答ありがとうございます。 とりあえず、インクルードの順番を変えて #include "stdafx.h" #include "Python.h" とすると、ビルドして動くようになり、一歩前進できました。 次は、PyRun_SimpleFile() で発生する例外と格闘しております。

その他の回答 (1)

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

Python インタプリタの拡張と埋め込み http://www.python.jp/doc/release/ext/ext.html に必要十分な情報はあると思いますが、読んだ上での質問ですか? 一つ注意しないといけないのは、バイナリ配布されているPythonでは 使用しているコンパイラがVC++7.1(VS2003)ですので、 Pythonそのものも自分でコンパイルしたものを使う必要があるかもしれない ということです。

yasuch
質問者

お礼

はい。 > 拡張モジュールのコンパイル方法は、モジュールの用途や > システムの設定方法に依存します; 詳細は後の章で説明します。 とありますが、どこで説明されているのか見つけられませんでした。

yasuch
質問者

補足

環境を変えてVS2003で下記のコードをビルドしてみましたが error C3861: 'Py_Initialize': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'PyRun_SimpleString': 識別子は、引数依存の照合を使用しても見つかりません。 error C3861: 'Py_Finalize': 識別子は、引数依存の照合を使用しても見つかりません。 というエラーが発生します ----- HelloPython.cpp ----- #include "Python.h" #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]){ Py_Initialize(); PyRun_SimpleString("print 'Hello, Python'"); Py_Finalize(); return 0; }

関連するQ&A

  • mingw用のboostビルドについて

    vsita x64 でのc++プログラミングで、これまではVisual studio 2008でboostを使用していましたが、現在eclipse+mingwの環境への移行を試みています。そのためのmingw用のboostライブラリの準備がうまくいかず困っています。 今回行ったことは boost_1_38_0.zip をダウンロードし、解凍。 同じくダウンロード解凍したbjam.exeをboost_1_38のディレクトリ(configureなどがある場所)に移動。 コマンドプロンプトから bjam -sTOOLS=mingw --prefix=C:\boost_for_mingw\boost install するとインストール先のlibフォルダには libboost_date_time-vc90-mt.lib  のようにvc90と名前にかかれたlibファイルが生成されていました。本来mingw用にlibboost_date_time-mgw34-mt.lib などとなるべきで、今回なんらかの理由でVisual studio用?にビルドされてしまっている(?)ようです。 またいくつかのライブラリ (たとえば正規表現ライブラリ libboost_regex) のlibファイルが生成されていないようでした。 どのようにすればmingw環境用のライブラリを生成することができるでしょうか? *mingw自体はすでにインストールしてあり、他のIDEから使用することができています。 *"C:\minGW\bin"にパスは通してありますが、mingw.exeというものはなく、"mingw32-gcc.exe" となっています。 *システムパスにはvisual studioのbinディレクトリが通してあります。 ネット上の情報も見てみましたが、大体上記の方法であっているようです。(sTools がmingw かgccかで異なっている場合があるようですが。。。) よろしくお願いします。

  • cppファイルを直接visual studioで開き、ビルドするには?

    cppファイルを直接visual studioで開き、ビルドするには? 私はvisual studio 2008を使ってプログラミングをしています。 いつもみたいに、プロジェクト作成→cppファイル作成って流れでやると普通に(ビルドやデバッグが)できるのですが、 プロジェクトを作成せず、裸のcppファイルだけをvisual studioで開くと、ビルドとか何もできません。実行して、コンソール画面を出したいのですが…。 出来る方法はあるのでしょうか? また、どうしてこの方法ではできないのかも、教えてくれるとありがたいです。 よろしくお願いします。

  • スケルトンプログラムをビルドできません

    Windowsプログラミングの基礎、スケルトンプログラムを ビルドできなくて困っています。 以前Borland C++ compiler 5.5を使っていたときは ビルドできていたのですが、昨日Visual Studio 2005を購入し、 テストでビルドしようとしたところ 次のようなエラーが出てしまいました。 error C2664: 'CreateWindowExW' : 2 番目の引数を 'char [13]' から           'LPCWSTR' に変換できません CreateWindow関数の第二引数を "Sample Program"というふうにしています。 UNICODEが関係しているらしいというところまでは 分かったのですが、具体的にどのように コーディングしてよいのか、まだ分かりません。 初歩的な質問で申し訳ないですが、よろしくお願いします。

  • ビルドできない

    Visual studio 2005Academic Editionを使ってC++を打っていますが、 本の通りにプログラムを打っているのに、ビルドすると必ず失敗します。プログラムは正しいのですが、どうしたらビルドに成功するのでしょうか?

  • Perl, Ruby, Pythonいずれかの習得

    私は普段、 C, C++, nasm を使ってプログラミングしています。 最近(主にテキスト等の処理のために)スクリプト言語を習得しようと思いたち(C++のboostでもいいんだけど)、どれがいいかと悩んだ結果、タイトル通り Perl, Ruby, Python のどれかがいいという考えに至りました。 一つ一つの言語としてのメリット、デメリットはあると思いますが、この3つに関しては至るところで議論されていますし、五十歩百歩というのが結論のようです。 そこでこれらの言語をお使いの方々から現在 CやC++ を主に使っている人間が最も習得しやすいとおもわれる言語はこの3つのうちどれかについてご意見賜りたくおもいます。 よろしくお願いします。

  • visual studio 20008について

    私は、学校でvisual studio 2003を用いたプログラミングを行っております。家でもプログラミングを続行したく、今回、自宅のPCにvisual studio 2008を導入しようか検討しております。 そこで質問なのですが、visual studio 2003で作成したプロジェクトをvisual studio 2008でさらに編集を加え、再度visual studio 2003で続きを行う(その逆も)ことはできないのでしょうか。 調べてみるとvisual studio 2008ではFramework1.1が対応していないようなので、なんらかの方法を使ってvisual studio 2008でもFramework1.1での開発を可能にすることができるのか疑問に思い、お伺いしたいのです。 もしくは、visual studio 2008でビルドをかけた際、Framework1.1で対応していないものがあればビルドエラーを出す方法等あれば教えていただきたいのです。 お手数ですが質問にお答えいただけると幸いです。 よろしくお願いいたします。

  • オープンソースビルド方法

    下記で配布されているソースはlinux環境で開発したようですが、 windows でビルドしたいのですが、 どのようにすればよいでしょう? ビルドしてDLLを作成したいです。 http://libharu.org/wiki/Downloads nmakeを実行すれば良いのでしょうか? visual studio は使えないでしょうか? 基本的なことかもしれませんが、どこから手をつけて良いかわかりません。 宜しくお願い致します。

  • dxx - 更新しています。   ビルドしても変わっていない

    はじめまして。プログラミング初心者です。 Visual C++.NET でwindowsプログラミングをしているんですが、「ソリューションのビルド」をすると ------ ビルド開始 : プロジェクト : dxx, 構成 : Debug Win32 ------ dxx - 更新しています。 ---------------------- 終了 ---------------------- ビルド : 1 正常終了、0 失敗、0 スキップ とだけでて、ソースを書き換えたのに前のと変わっていないんです。 どうしたらちゃんと更新されるんでしょうか・・ 教えてください。宜しくお願いします。

  • python を使って SNS 作成

    現在、pythonを学習中のプログラミング初心者高校生です。初級者にわかりやすいとのことでpython勉強し始めました。しかし、スクリプト言語にはphp perl rubyなどがあるので僕の選択肢が正しかったのか不安になってきてしまいました。 とりあえず今のところpythonとhtml,cssの勉強をしています。その後javascriptなどを学ぶつもりです。 そこで質問があります (1)Pythonを使った場合sns作成の、最善な方法(直線的に、どの言語を学び具体的にどのように作っていくべきか) (2)そもそもpythonではなくそれ以外のスクリプト言語の方がSNSを作るのに向いているのか  またその場合どのような手順で進めるべきか *僕が作りたいのはアメーバピグのようなゲーム要素は取り入れないつもりです どうかご教授宜しくお願いします!

  • Visual C++のビルドで

    こんにちは。VC++の初心者です。 今MFCアプリケーションでシングルドキュメントで「ユニコードライブラリをしようする」をチェックなしで簡単なプログラムを作ったのですが、HelloVCView.cppファイルの中で、 void CvdclsView::OnDraw(CDC* pDC)  //■変更 /*pdc*/ → pDC { ・・・   pDC->TextOut(0,0,"Hello,VC++"); }     と本に書いてあるとおり変更して、ビルドしたところ、 1>c:\documents and settings\・・\my documents\visual studio 2005\projects\vdcls\vdcls\vdclsview.cpp(51) : error C3872: '0x3000': この文字を識別子で使用することはできません 1>c:\documents and settings\・・\my documents\visual studio 2005\projects\vdcls\vdcls\vdclsview.cpp(52) : error C3646: '    ' : 不明なオーバーライド指定子です といった表示がでてしまい、ビルドできません。最初のほうはこれでビルドできたのですが、最近になってこのように新しく作ってビルドするとこのような表示が出てしまいます。このエラー表示をダブルクリックしたら上のOnDraw関数のところに移動しました。設定の箇所をいじったつもりはないのですがもしかしたらそのようなミスがあったかもしれません。 この0x3000とは何でしょうか?どのようにすればこのような問題が解決するのでしょうか。変な質問かもしれませんが、よろしくお願いします。 ちなみにVisual Studio 2005 Academic Editionを利用しています。

専門家に質問してみよう