3


0

LinuxでCでboost-pythonを使う

私の開発会社はかなり有用なPythonベースのテストスイートをまとめました、そしてそれを使っていくつかのLinuxベースのCコードをテストしたいと思います。 Boostに同梱されているテストプロジェクトをコンパイルすることができました(ディレクトリに 'bjam’と入力しても動作します)が、実際のプロジェクトに問題があります。

ブーストライブラリとbjamをソース(v1.35.0)からビルドし、bjamを実行すると、bin / gcc-4.1.2 / debugディレクトリに.soが入ります。 私はpythonを実行して "import"を実行します。ImportError: libboost_python-gcc41-d-1_35.so.1.35.0:共有オブジェクトファイルを開けません:そのようなファイルやディレクトリはありません

ライブラリディレクトリを見ると、次のようになります。 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のバージョンのライブラリをインストールすると、 "No Jamfile in / usr / include"と表示されます - そして、それらがシステムレベルのjamfileを省いていると言うdebianバグがあります。

私はソースからそれをうまく動かすことを望んでいるので、誰かがライブラリの問題を解決するために何か提案があれば、私はそれらを聞きたいです。

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

3 Answer


2


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

mtはマルチスレッドを意味し、dと直交します。 あなたはおそらくあなたのプロジェクトにm d non-dを使いたいでしょう。

gccにリンク先を指示する方法がわからない(私はVisual Studioを使用しています)のが怖いです。 試してみる一つのこと:

男gcc

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

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


2


ブーストライブラリのデバッグバリアントも同様に構築したい場合は、オプション `--build-type = complete`を付けてbjamを呼び出す必要があります。

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


2


解決策を見つけました! Boostはデフォルトでデバッグビルドをビルドします。 「bjam release」と入力すると、リリース構成が構築されます。 これは、リリース構成を構築しないため、build-typeをreleaseに変更することと同じではないことに注意してください。 Torstenが示唆しているように「完全な」ビルドを実行しても、デバッグバージョンだけをビルドするのを止めることはできません。

-dライブラリは /bin.v2/libs/python/build//debug/にあり、リリースライブラリは `` / release 'にあり、トップレベルのlibにはインストールされていないことも注目に値します。 'ディレクトリ。

他の提案をありがとう!