2009-07-09 2 views
7

私はBoost Getting Startedの記事に従っています。 私はそれをBjamとともにインストールしました。私はインクルードファイルとライブラリファイル(.a、.so)を見ることができました。LinuxでBoostライブラリをインストールしてビルドする

/tmp/ccJFVVid.o: In function `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)': 
    test_boost2.cc:(.text._ZN5boost11basic_regexIcNS_12regex_traitsIcNS_16cpp_regex_traitsIcEEEEE6assignEPKcS7_j[boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int)]+0x22): undefined reference to `boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)' 
    collect2: ld returned 1 exit status 

それは私のWindowsマシンの下で大丈夫働いていた:私は、このコマンド

g++ -I./boost/include -L./boost/lib -lboost_regex-gcc43-mt -static -o test_boost2 test_boost2.cc 

を使用してコードの上に構築する場合

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

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

は、私はこのエラーを取得します。

どういうところが間違っていますか?

gccのバージョン4.3.2(Debianの4.3.2-1.1)

のLinux XXXXXXXX 2.6.26-1-686#1 SMP金3月13日午後06時08分45秒UTC 2009のi686 GNU/Linuxの

答えて

8

問題が見つかりました。 g ++コマンドの問題! :(申し訳ありません。 -lオプションを行の最後に移動すると、それ以上の文句はありません:)

17
sudo apt-get install libboost-regex-dev 

もっとインテリジェントなシステムがうまくいくソースからインストールするのは面倒ではありません。コンパイルするに

、単に利用可能なパッケージ名(ブーストのより多くの部分)の一覧を取得するには

g++ -lboost_regex boost.cpp -o boost 

を使用します。

apt-cache search libboost | grep -- -dev 

Dislaimer:それは何をお使いなので、私はDebianを使うと仮定GCCのバージョンレポート。

+0

それは動作します!しかし、Boost(1.39)の最新バージョンをインストールするにはどうすればよいですか?私が本当に使いたいのはBoost.Asioライブラリです。 :) –

+0

lennyを使用している場合は、 'libboost1.35-dev'を使用できます。squeezeを使用している場合は、 'libboost1.38-dev'があります。また、asioのスタンドアロン版「libasio-dev」もあります。しかし、レニーのバージョンはかなり古いです。 –

+0

リンクされたライブラリは、コンパイルの最後になければなりませんか?したがって、それはでしょう: g ++ boost.cpp -o boost -lboost_regex – user289882

2

あなた

-L./boost/lib 

容疑者と思われます。 Boostをビルドすると、ライブラリはstage/libディレクトリに置かれます。また、デフォルトのビルドプロセスではスタティックライブラリが作成されないので、コマンドラインから-staticを削除する方がよいでしょう。それでも問題が解決しない場合は、my blogの手順に従って問題を解決することをお勧めします。

+0

私は別々に正規表現をコンパイルし、その結果を使用した後、同じエラーが発生します。 G ++ -I./boost_1_39_0 ./boost_1_39_0/libs/regex/build/gcc/libboost_regex-gcc-1_38.a -o test_boost2 test_boost2.cc –

+0

グラム++ -I./boost_1_39_0 -o test_boost2 test_boost2.cc ./boost_1_39_0/ libs/regex/build/gcc/libboost_regex-gcc-1_38.a ^この作品は!!!!!! –

+1

これは、静的ライブラリの場合、リンカのコマンドラインで指定した位置が重要なためです。再び、ブログの記事を参照してください。 –

関連する問題