7

Linuxで正規表現を使用するプログラムをコンパイルしようとしています。次の 4 つのファイルを含むディレクトリ gcc を作成する make -fgcc.mak と入力して、libs/regex/build にブースト ライブラリをビルドしました。

boost_regex-gcc-1_35
boost_regex-gcc-d-1_35
libboost_regex-gcc-1_35.a
libboost_regex-gcc-d-1_35.a

ここで、任意のディレクトリにあるプログラムから正規表現を使用したいと考えています。私は #include boost/regex.hpp

regex.hpp が見つからないというエラーが表示されました。次に、g++ コンパイラで -I オプションを指定しました。私はそのエラーを取得しませんでした。しかし、次のエラーが表示されます

undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)'

グーグルで調べたところ、上記の4つのライブラリのいずれかをプログラムにリンクする必要があることがわかりました。どうすればできますか。どちらをリンクする必要がありますか? その理由は?

4

2 に答える 2

10

libboost_regex-gcc-1_35.aリンクステップでオブジェクトファイルのリストに追加するか-static -lboost_regex-gcc-1_35、同じリストに追加してください。また-I、コンパイル手順でブースト インクルード ディレクトリを指すスイッチがあることを確認してください。ライブラリが通常の検索パス ( /usr/lib*nix 上)の外にある場合は、 -Wl,-L/path/to/boost/libsforg++または単に-L/path/to/boost/libsonを使用して、そのディレクトリをリンク コマンドに追加しますld

于 2009-02-17T23:27:41.117 に答える
0

ブーストファイルシステムを使用するときにも同様の問題に直面しました。静的にリンクさせるために必要なことは次のとおりです。

私の元の(問題のある)Makefileからの抜粋:LIBS = -static -lboost_filesystem

解決策:LIBS = -Wl、-Bstatic -lboost_filesystem -lboost_system -Wl、-Bdynamic

完全なMakefileは、 http: //code.google.com/p/neptuner/source/browse/codebase/trunk/stratego/uboat/Makefileから表示できます。

正しくリンクするには、boost_systemを追加する必要があります。libboost * .aを直接追加/指定すると、さらに多くの問題が発生しました。-Bdynamicは、標準ライブラリの静的リンクを防ぐために存在することに注意してください。

于 2010-03-27T14:10:42.777 に答える