3

Pythonで使用するために、Boost/Pythonを使用してC++コードから生成されたDLLを構築しようとしています(現在数日間)。私はドイツ出身の学生で、今までほとんど Java を使っていました (以前は C++ で基本的な OpenGL と gimp フィルターをいくつか書きました)。ですから、下手な英語や C++ の初心者の間違いについては、あらかじめご容赦ください。つまり、Java でのプログラミングは、C++ に比べてはるかに快適です。しかし、小競り合いは十分です。

エラー:

LINK : fatal error LNK1104: File "boost_python-vc110-mt-gd-1_53.lib" could not be openend

私のプリセット:

-MS Visual Studio 2012 (11.0) を使用

-boost_1_53_0 を使用

-python2.7 を使用 (3.3 では問題が発生する可能性があると聞きました)

私がしたこと:

PythonをインストールしてPATHに追加しました。次に、ブースト チュートリアル ページで説明されているように、VS で新しい空のプロジェクトと、次の内容のクラス ファイル「Test.cpp」を作成しました。

char const* greet()
{
    return "hello world";
}

#include <boost/python.hpp>

BOOST_PYTHON_MODULE(Test)
{
    using namespace boost::python
    def("greet", greet);
}

次に、VS プロジェクトのプロパティに新しい部分が追加されました。

構成プロパティ > 一般 > 構成タイプ > 動的ライブラリ (.dll)

C/C++ > 一般 > インクルードディレクトリの追加 > C:[..]\boost_1_53_0

リンカー > 一般 > 追加のライブラリ ディレクトリ > C:[..]boost_1_53_0\stage\lib

エラーから、リンカーまたはインクルードで何か問題があったと思います。よくわからなかったので、Linker > General > Additional Library Directories も boost_1_53_0\libs に変更しましたが、同じエラーが発生しました。はい、正しくpythonを含めました。Python の横に何か他のものを Linker > Input for boost に入れる必要があるかどうかもわかりません。

次に、必要なものがすべて揃っていることを確認するために、msvc-11.0 以外のオプションを指定せずに bjam を使用してブーストをビルドしましたが (boost/python には追加のビルドは必要ないことを読みました)、それでも同じエラーが発生しました。誰かが私を助けることができますか?何をすればいいのか、順を追って説明したいと思います。これには本当に絶望しています。

ところで、「libboost_filesystem-vc100-mt-s-1_49.lib」を使用したリンカー エラー LNK1104の数日前にこの男と同じエラーが発生し、作業を停止し、再度開始すると、まったく新しいエラーが発生しました (私はこれがどのように起こったかはわかりません)。

4

4 に答える 4

4

静的ライブラリを探しているので、BOOST_PYTHON_STATIC_LIBフラグを追加し、VS プロパティ -> プリプロセッサ -> プロセッサ定義に移動し、BOOST_PYTHON_STATIC_LIBフラグを追加します。

于 2015-01-20T10:01:46.283 に答える
0

あなたの試みに非常に感謝していますが、あなたの答えはどれも役に立たなかったことに注意してください. その後、仲間の学生が正しい答えのヒントを私に与えてくれました.いくつかのステップは本当に簡単で、他のステップは私には理解できませんが、今ではうまくいきます.

最初の問題は、新しいブースト 1.53.0 が Python27 以前では動作しないことでした。次に、それを Python33 とリンクし、ビルド エラーを削除しました。

しかし、もちろん、ビルド バージョンはエラーなしでは機能しませんでした。VisualStudio によってビルドされた .pyd からインポートし、greet メソッドを呼び出す helloboost.py を起動しようとすると、次のエラーが発生しました。

ImportError: DLL load failed: The specified module could not be found.

依存関係ウォーカーでhello_ext.pydをチェックし、乱暴にコピーを貼り付けたところ、boost_python-vc110-mt-gd-1_53.dllが必要であることがわかりました(おそらく必要なものに応じて、以前にbjamでビルドされました)フォルダ。それはうまくいきました。誰かが、pyd と同じフォルダーにこの dll が必要であるとどこにも説明されていない理由を説明できるかもしれません (または、何かを見逃していましたか?以前に間違いを犯したからですか?)

とにかく、私はそれが今うまくいっていることをとてもうれしく思い、他の人に役立つことを願っています.

于 2013-04-23T09:16:55.693 に答える
0

あなたはおそらく今までにこれを解決したでしょう - しかし:

.exe がロードする .dll を探すとき、パスは指定されません。したがって、.dll がファイルの検索パスに含まれている必要があります。

また、Visual Studio 2013 用の 1.49 ライブラリをビルドしようとしていましたが、プロジェクトから LNK エラーが発生し続けました。誰がstackoverflowで提案したかはわかりませんが、誰か\何かが、最近の環境用に.libを作成する方法を知っている最近のブーストからビルドシステムをコピーするというアイデアをくれました。(ありがとうございました)

1.58 でブートストラップを実行した後、1.58 からブースト ビルド システムをコピーし、b2、bjam、および boost-build.jam を以前のブースト フォルダー ルートにコピーして、そこにある同じ名前のファイルを置き換える必要がありました。また、ビルド システムをサポートするために、後の tools\build フォルダーをコピーする必要があります。

私が見つけた同様の状況で他の誰かを助けるかもしれないことを期待してここに注目してください.

参照: Windows が DLL を見つけるために使用する検索パス

于 2015-07-20T06:29:52.447 に答える