ブーストライブラリのシステム全体にインストールされたデフォルトに加えて、ブースト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)
ありがとうございました。