3

ブーストライブラリのシステム全体にインストールされたデフォルトに加えて、ブーストC ++ライブラリのローカルインストール(私のホームフォルダ(Linux)、たとえば$ HOME / boost)が必要です。私はそれらをソースから構築しました、そしてそれはうまくいきました。

その後、環境変数CPLUS_INCLUDE_PATHとLD_LIBRARY_PATHをローカルインストールの宛先と一致するように設定し、両方がそれぞれ$ HOME / boost/includeと$HOME/ boost /lib/を指すようにします。

これをテストするために、次のコードを使用して、ヘッダーのCPLUS_INCLUDE_PATHの正しい使用法をテストしました。

#include <boost/version.hpp>
#include <iostream>
#include <iomanip>

int main()
{
  std::cout << "Boost version: " << BOOST_LIB_VERSION << std::endl;

  return 0;
}

コンパイルすると g++ -o Test_boost_version test_boost_version.cpp期待どおりに機能し、期待される(ローカル)バージョンが報告されます。CPLUS_INCLUDE_PATHを空にすると、デフォルトのシステム全体のインストールのブーストバージョンが得られます。ここまでは順調ですね。

リンクをテストするために、次のコードを使用しました(ブーストホームページから取得:

#include <boost/regex.hpp>
#include <iostream>
#include <string>

int main()
{
    std::string line;
    boost::regex pat( "^Subject: (Re: |Aw: )*(.*)" );

    while (std::cin)
    {   
        std::getline(std::cin, line);
        boost::smatch matches;
        if (boost::regex_match(line, matches, pat))
            std::cout << matches[2] << std::endl;
    }   
}

で構築しました g++ -o Test_boost_linking test_boost_linking.cpp -lboost_regex

ただし、呼び出しldd Test_boost_linkingはローカルインストール(LD_LIBRARY_PATHを介して提供)を利用しませんが、次のようになります。libboost_regex.so.1.42.0 => /usr/lib/libboost_regex.so.1.42.0 (0x00007f9264612000)

を使用するg++ -o Test_boost_linking test_boost_linking.cpp -lboost_regex -L$HOME/boost/libと、lddは正しいライブラリ(libboost_regex.so.1.50.0 => $HOME/boost/lib/libboost_regex.so.1.50.0 (0x00007f6947d2a000))を報告します。

コンパイルがシステムデフォルトのブーストインストールを無視し、ローカルインストールのみを使用するようにローカル環境を設定したいので、これは実際には私にとって問題です。これは、CPLUS_INCLUDE_PATHとLD_LIBRARY_PATHを設定したときに達成されるものとまったく同じだと思いました。しかし後者の場合、これは当てはまらないようです。

g++ -o Test_boost_linking test_boost_linking.cpp -lboost_regexでは、 (-Lなしで)使用するとローカルライブラリが使用されることをどのように確認できますか?

[編集]さらに考えてみると、コマンドラインで「-L $ HOME / boost / lib」を使用することが実際に絶対に必須かどうか疑問に思います(環境変数としてLDFLAGSを使用しても、おそらく組み合わせて効果がないようです)非標準ディレクトリでライブラリを使用する場合は、Makefileを使用しますか?これは本当ですか?

(ところで、これはブーストだけでなく、他のライブラリにも当てはまると思います...)

(私が使用したもの:g ++(Debian 4.4.5-8)4.4.5)

ありがとうございました。

4

1 に答える 1

3

LIBRARY_PATHリンク時にライブラリの場所を gcc に知らせるには、環境変数を使用する必要があります。LD_LIBRARY_PATH実行時に動的ライブラリを見つける場所をプログラムに知らせます。この回答には詳細があります。「GCC の紹介」からの次のリンクも役立つ場合があります:コンパイル オプション: 環境変数共有ライブラリと静的ライブラリ

于 2012-07-25T08:01:47.190 に答える