web-dev-qa-db-ja.com

#include <Python.h>が機能しないのはなぜですか?

"#include <Python.h>"を使用してC++でPythonモジュールを実行しようとしていますが、プロジェクトの「追加のインクルード依存関係」を「\ include」に設定した後、次のエラーが発生します。デバッグ、

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

Pythonの開発バージョンをダウンロードする必要があると読みましたが、そのリンクが見つかりませんでした。さらに、ファイル「python27_d.lib」を「libs」フォルダーにコピーする必要はありませんか?

PythonのAnacondaディストリビューションを使用していることに注意してください。

前もって感謝します!

13
Curious

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

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

「_d」はそれがデバッグライブラリであることを示しているので、デバッグ構成用にそれが必要であり、リリース構成用に(おそらく)「_ d」がないものが必要です。

8
Mark Stevens

私は通常、デバッグビルドで非デバッグPython libを使用することで、これを回避します。通常、これは次のようなコードになります。

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

ここで、Python.hのインクルード中に_DEBUGの定義を非表示にします。

24
Klamer Schutte

VisualStudioをデバッグではなくリリースモードにします。

4

必ずしもPython debug build ... [ブーストを使用していない場合でも]]を使用する必要はありません。boost.pythonのドキュメントでラッパーがあります。すべてのWindowsデバッグの問題を処理するPython.h。これにより、リリースpython dllに対してデバッグ拡張機能を構築できます。

http://www.boost.org/doc/libs/1_53_0/libs/python/doc/building.html#id19 Pythonビルドのデバッグ

1
seanv507

Visual Studioでは、プロジェクトに「追加のインクルードディレクトリ」を追加する必要があります。以下の手順。プロジェクトを右クリック->プロパティ-> c/c ++->追加のインクルードディレクトリ->「Python\include」フォルダ(例:c:\ python\include)をポイントします。

1
G T

Boost.pythonを使用してC++からAnaconda pythonパッケージにアクセスしようとしたときに、同様のエラーが発生しました。C++ Boostライブラリの個人的な印象は、それらが素晴らしいということから始めましょう。不完全なドキュメントを含むアイデア。boost.orgには大量のドキュメントがありますが、著者が言及するのが簡単すぎると思われる重要な詳細が常に省略されているようです。しかし、私の石鹸箱から降りましょう...

Boost.Pythonを私のシステムで動作させる方法を[うまくいけば、最終的に]理解するための継続的な推進力は、非常に多くの素晴らしいPython科学パッケージ[SymPy、Numpy、SciPy、 matplotlibなど]はAnacondaディストリビューションに含まれており、QtCreatorで構築されたC++プロジェクトからアクセスするのは本当に素晴らしいことです。Boostドキュメントは、Boost.Pythonが私のためにそれを行うことになっていることを示唆しているようです。悲しいかな、それらのドキュメント著者が言及するのを煩わせるにはあまりにも些細なことだと考えているように見える重要な詳細を省略しているようです...

とにかく、最初は、python.hが見つからなかったことを示すビルドエラーが発生しました。 Qt Creatorプロジェクトの.proファイルにこれらの2つのステートメントを追加することで、これを取り除きました。これは、Boostがインクルードファイルをインストールした場所とAnacondaがシステムのpython.hファイルをインストールした場所をqmakeに通知します。

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

その後、「python27.lib」が見つからなかったことを示すLNK1104エラーが発生しました。これらの2つのステートメントを.proファイルに追加することで、これを取り除きました。 1つ目は、アナコンダのpython27.libファイルの場所をqmakeに指示します。 2番目はqmakeにboost.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」を開くことができないことを示すエラーが表示されるようになりました。もちろん、エラーはそのファイルが存在しないことが原因です。課題は、なぜそれが求められているのか、そしてどこでそれを見つけるのかを発見することです。

1
user2551828