6

Boost ライブラリを使用しようとしましたが、失敗しました。コードを参照してください。

#include "listy.h"
#include <boost/regex.hpp>
using namespace boost;

ListyCheck::ListyCheck() {

}

ListyCheck::~ListyCheck() {

}

bool ListyCheck::isValidItem(std::string &__item) {
    regex e("(\\d{4}[- ]){3}\\d{4}");

    return regex_match(__item, e);
}

コンパイルしようとすると、次のメッセージが表示されます。

/usr/include/boost/regex/v4/regex_match.hpp:50: `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator, std::allocator > >, std::allocator, std::allocator への未定義参照> > > >、boost::regex_traits >

::マッチ()'

/usr/include/boost/regex/v4/basic_regex.hpp:425: `boost::basic_regex への未定義の参照 >

::do_assign(char const*, char const*, unsigned int)'

/usr/include/boost/regex/v4/perl_matcher.hpp:366: `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator, std::allocator > >, std::allocator, std::allocator への未定義参照> > > >、boost::regex_traits >

::construct_init(boost::basic_regex > > const&, boost::regex_constants::_match_flags)'

等...

4

4 に答える 4

12

にリンクする必要がありますlibboost_regex-lboost_regexgcc を使用している場合は、コンパイラ スイッチに追加します。

于 2010-06-11T08:42:48.007 に答える
4

これらはリンカー エラーです。Boost 正規表現ライブラリは、shared_ptr (たとえば) のようなヘッダーのみのライブラリではありません。.a または .lib などのバイナリ ライブラリにリンクする必要があります。

于 2010-06-11T08:43:39.113 に答える
1

boost_regex にリンクする必要があります。

于 2010-06-11T08:44:04.400 に答える
0

同様の問題がありました。

解決策は、cmake を介してコマンド ターゲット リンク ライブラリにリンクすることでした。

target_link_libraries(boostGraph Boost::regex Boost::date_time Boost::system Boost::filesystem Boost::thread Boost::graph Boost::program_options)

ここで提供されている構文 -lboost_regex を使用しても機能しませんでした (少なくとも cmake では機能しません)。

根本的な問題はライブラリの異なるバージョンである可能性があり、それが問題を引き起こし、コンパイラとリンカーが正規表現ライブラリを見つけたとしてもです。

于 2020-05-07T08:19:57.853 に答える