2

Fedora10 マシンにブースト C++ ライブラリが既にインストールされていますが、ホーム フォルダーのどこかに保持している新しいバージョンを使用したいと考えています。g++ で、デフォルト ( /usr/include and /usr/lib64) ではなく、ホーム フォルダーの場所にあるインクルード ファイルとライブラリ ファイルを使用する必要があります。

さらに言えば、ここで説明されているように、ファイルCPLUS\_INCLUDE\_PATH and LIBRARY\_PATHで環境変数も宣言しました。~/.bashrc

今、私が走るとき、

g++ -o hello.so -fPIC hello.cpp -shared -lboost_python

プリプロセッサは、ホーム フォルダの場所からインクルード ファイルを使用して、デフォルトの場所を上書きします (CPLUS\_INCLUDE\_PATH検索パスでの優先順位が高いため)。しかし、リンカーは同じ優先順位規則に従っていないようです。/usr/lib64最初に検索するのではなく、常にデフォルトの場所から libboost_python.so を使用しますLIBRARY\_PATHlibboost\_python.soスイッチで明示的に指定した場合にのみ、ホーム フォルダー内のライブラリにリンクします-L。これは本当に不便です。

4

1 に答える 1

2

スイッチは、ライブラリの-L場所をコンパイラに伝える標準的な方法です。コンパイラ/リンカー スイッチを構築するメイクファイルを作成します。時間を費やす価値があることがわかります。次のようなことができます:

MY_LIBPATH += -L$(BOOST_LIB_PATH)
MY_INCPATH += -I$(BOOST_INC_PATH)
こんにちは.so: こんにちは.cpp
    g++ -o $@ -fPIC $(MY_INCPATH) $(MY_LIBPATH) hello.cpp -shared -lboost_python

そして、環境を介してこれを制御できます (もちろん、makefile の構造にはさまざまなバリエーションがあります)。

于 2009-05-14T17:52:24.360 に答える