3

私の開発ショップは、非常に便利な Python ベースのテスト スイートをまとめました。これを使用して、Linux ベースの C++ コードをテストしたいと考えています。Boostに同梱されているテストプロジェクトをコンパイルして入手しました(ディレクトリに「bjam」と入力すると動作します)が、実際のプロジェクトに問題があります。

ソース (v1.35.0) からブースト ライブラリと bjam をビルドします。bjam を実行すると、bin/gcc-4.1.2/debug ディレクトリに .so が作成されます。Python を実行して「インポート」すると、次のようになります: ImportError: libboost_python-gcc41-d-1_35.so.1.35.0: cannot open shared object file: No such file or directory

ライブラリディレクトリを見ると、次のものがあります。 libboost_python-gcc41-mt-1_35.so libboost_python-gcc41-mt-1_35.so.1.35.0 libboost_python-gcc41-mt.so

明らかに、-mt ライブラリの代わりに -d が必要です。または、-d の代わりに -mt ライブラリを指す必要がありますが、Jamroot ファイルでそれを行う方法がわかりません。

Debian Etch のバージョンのライブラリをインストールすると、「/usr/include に Jamfile がありません」というメッセージが表示され、システム レベルの jamfile が省略されているという debian のバグがあります。

ソースから動作するようになることを期待しているので、ライブラリの問題を解決するための提案があれば、聞いてみたい.

回答 1 への回答: ヒントをありがとう。では、代わりに MT ライブラリを使用するにはどうすればよいか知っていますか? フラグが見つからないにもかかわらず、デバッグモードにいると思って使用している bjam または Jamfile に問題があるようです。GCC の呼び出しに特定のライブラリを含める方法は知っていますが、Boost 側からそれを構成する方法がわかりません。

4

3 に答える 3

2

1 つの重要なポイント: -d はもちろんデバッグを意味し、プロジェクトのデバッグ ビルドにのみリンクする必要があり、Python のデバッグ ビルドでのみ使用できます (または、以下を参照)。デバッグ lib を非デバッグ ビルドにリンクしようとしたり、デバッグ pyd を非デバッグ python にインポートしようとすると、悪いことが起こります。

mt はマルチスレッドを意味し、d と直交しています。プロジェクトに mt non-d を使用することをお勧めします。

何をリンクするかをgccに伝える方法がわからないのではないかと心配しています(私はVisual Studioを使用しています)。試してみる 1 つのこと:

man gcc

リンカーで特定のライブラリを強制する方法を教えてくれるはずです。

編集:実際には、プロジェクトのデバッグ バージョンを Python の非デバッグ ビルドにインポートできます。python.h をインクルードした場所には、代わりに boost/python/detail/wrap_python.hpp をインクルードしてください。

于 2008-09-15T21:33:38.283 に答える
2

ブースト ライブラリのデバッグ バリアントもビルドする場合は、オプションを指定して bjam を呼び出す必要があります--build-type=complete

Debian では、python2.x-dbg パッケージでデバッグ Python インタープリターを取得します。システム Boost を使用する場合、Boost ライブラリのデバッグ ビルドは libboost1.xy-dbg にあります。

于 2008-09-15T21:42:30.773 に答える
2

解決策を見つけました!Boost は、デフォルトでデバッグ ビルドをビルドします。「bjam release」と入力すると、リリース構成が構築されます。(私が知る限り、これはどこのドキュメントにも記載されていません。)これは、リリース構成をビルドしないため、ビルド タイプをリリースに変更することと同じではないことに注意してください。Torsten が示唆するように「完全な」ビルドを実行しても、デバッグ バージョンのみのビルドが停止されるわけではありません。

-d ライブラリが<boost-version>/bin.v2/libs/python/build/ <gcc version>/debug/ にあり、リリース ライブラリが<gcc-version>/release にあり、最上位の「libs」ディレクトリにインストールされていないことにも注意してください。

他の提案をありがとう!

于 2008-09-18T14:27:47.750 に答える