2013-04-24 16 views
9

私はしかし、設定後#<Python.h>を#includeにしていないのはなぜですか?

LINK : fatal error LNK1104: cannot open file 'python27_d.lib' 

、デバッグのときに私は次のエラーを取得する「が含まれる\」私が読んプロジェクトへの「追加の依存関係を含める」、"#include <Python.h>"を使用してC++でPythonモジュールを実行しようとしています私はPythonの開発版をダウンロードするべきですが、私はそのためのリンクを見つけられませんでした。さらに、 "python27_d.lib"ファイルを "libs"フォルダにコピーする必要はありませんか?

私はPythonのAnacondaディストリビューションを使用しています。

ありがとうございます!

+0

「PythonモジュールをC++で実行する」とはどういう意味ですか?これを行うには、[Pythonインタプリタを埋め込む]必要があります(http://docs.python.org/2/extending/embedding.html)。単に '#include 'を実行してもそれはありません。 – abarnert

+1

一方、[WindowsでのCとC++拡張のビルド](http://docs.python.org/2/extending/windows.html)と[リンクの要件](http://docs.python.org/ 2/extend/embedding.html#linking-requirements)(埋め込み用)?インタプリタを静的に、または動的に埋め込むつもりですか?あなたはどこにあなたが埋め込みようとしている通訳を手に入れましたか? – abarnert

+0

PythonのソースコードからPythonのライブラリを構築する方が簡単かもしれません。 – Aya

答えて

6

私はpythonについてよく分かりませんが、python27_d.libが存在しないか、リンカが探している場所に少なくとも存在しないことを示すメッセージが表示されます。

すでにコンパイラのインクルード問題を修正しましたが、Windowsエクスプローラでpython27_d.libファイルを見つけ、そのパスを追加のライブラリ依存性パスに追加します。これは、設定 - >リンカ - >一般 - >追加ライブラリディレクトリの下にあります。

"_d"はデバッグライブラリであることを示しています。そのため、デバッグ設定用のものと、リリース設定用の "_d"(おそらく)のないものが必要です。

+0

ありがとう、どうして私はデバッグライブラリを手に入れますか? – Curious

+0

ああ、申し訳ありませんが、それは単なるVSの問題だと思った。それを見てみると、リリース( "_d"はない)バージョンは配布されていて、 "_d"は配布されていないようです。人々はここでそれを解決するいくつかの方法を見つけました:http://stackoverflow.com/questions/11311877/creating-a-dll-from-a-wrapped-cpp-file-with-swig –

+0

私は解決策を試しました "#define MS_NO_COREDLL "となり、感謝して100万人が働いているようです:)しかし、なぜか分かりません。 – Curious

0

必ずしもPythonのデバッグビルドを使用する必要はありません... [あなたがboostをusimngしていなくても]私はboostthonのドキュメントを見ています。そこにはPython.hのラッパーがあります。すべてのWindowsデバッグの問題を処理するので、リリースpython dllに対してデバッグ拡張をビルドすることができます。

http://www.boost.org/doc/libs/1_53_0/libs/python/doc/building.html#id19 Pythonのデバッグは、C++からアナコンダのpythonパッケージにアクセスするためにBoost.pythonを使用しようとしたとき、私は同様のエラーに遭遇した

0

を構築します。 C++ Boostライブラリの私の個人的な印象は、不完全な文書化の素晴らしいアイデアだということから始めましょう。 boost.orgには数多くの文書がありますが、著者が特に言及するのはあまりにも些細なものであると思われる重要な詳細は除外されているようです。しかし、私の石鹸ボックスから降りてみましょう...

Boost.Pythonを私のシステム上で動作させる方法を理解するために、私にとっての継続的な衝動は、非常に多くの偉大なPython科学パッケージ[ SymPy、Numpy、SciPy、matplotlibなど]が含まれており、Qt Creatorを使用して構築されたC++プロジェクトからアクセスすることは本当に素晴らしいことです。そして、Boostドキュメントは、Boost.Pythonが私のためにそれを行うと考えられているようです。ああ、これらのドキュメントは、著者があまりにも些細なことを言いたいと思うように見える批判的な詳細を除外しているようです...

とにかく、最初は、python.hが見つかりませんでした。私はブーストが含まれたファイルをインストールし、qmakeのを教えてくれ、私のQt Creatorをプロジェクトの.PROファイルにこれらの二つの文を、追加することによって、その処分したアナコンダは、私のシステム上のはPython.hファイルをインストールした場所:その後

INCLUDEPATH += C:\boost_1_55_0 
INCLUDEPATH += C:\Anaconda\include 

、 'python27.lib'が見つからないことを示すLNK1104エラーが出ました。これら2つのステートメントを.proファイルに追加することで、この問題を解決しました。最初は、qmakeにAnacondaのpython27.libファイルの場所を示します。二番目はqmakeにブーストを見つける場所を示します。Pythonバイナリ:

LIBS += "C:/Anaconda/libs" 
LIBS += "C:/boost_1_55_0/stage/lib/libboost_python-vc110-mt-gd-1_55.lib" 

これまでのところ、これまでのところです。私は今、まだ修正が見つからないファイル 'C:/Anaconda/libs.obj'を開くことができないことを示すエラーを受け取ります。エラーはもちろん、そのファイルが存在しないために発生します。課題は、なぜそれが求められているのか、どこでそれを見つけるのかを発見することです。

3

ビジュアルスタジオをデバッグの代わりにリリースモードにしてください。

+0

私の問題を解決したのは、上記の回答と本当にこの回答でした。つまり、(1)デバッグではなく、リリースモードに設定する、(2)Pythonパスを指すようにリンカを設定する、という手順がありました。 – rrs

19

私は通常、デバッグビルドで非デバッグPython libを使用してこれを回避します。あなたははPython.hの混入時に_DEBUGの定義を隠す

#ifdef _DEBUG 
    #undef _DEBUG 
    #include <Python.h> 
    #define _DEBUG 
#else 
    #include <Python.h> 
#endif 

:通常、このようなコードにつながります。

+1

DOH!これが解決策です!あなたのデバッグバージョンがpython27_d.libではなくpython27.libとリンクしていることを確認してください。 –

関連する問題