Mitglied 7974
Gast
Servus!
Ich versuche schon ewigst, meinem OS X-GCC reguläre Ausdrücke beizubringen. Im Moment werkle ich mit Boost.Regex herum, bekomme aber kein Programm damit compiliert. Hier mal der Quellcode, den ich aus dem Boost-Tutorial habe:
Die Boost-Library habe ich mit dem typischen Dreiersatz "./configure, make, make install" in /usr/local/include/boost-1_34 installiert. Ergo müsste der Aufruf von
ausreichen, um das Programm (hier test.cpp) compilieren zu können. Tut es aber nicht. Der Linker meckert und meldet mir folgendes:
Ich werde daraus nicht schlau und wende mich nun an euch. Hat irgendwer von euch schon mal das Boost-Paket zum Laufen gebracht? Wenn ja, wie? Oder gibt es funktionierende Alternativen? Vielleicht sogar in der Standard-Bibliothek?
Ich verwende jedenfalls GCC-Version 4.1.2, die C++ ansonsten anstandslos compiliert. Mit früheren Versionen hat es auch nicht geklappt.
Ich bin für jede Anregung dankbar.
Gruß,
Matthias
Ich versuche schon ewigst, meinem OS X-GCC reguläre Ausdrücke beizubringen. Im Moment werkle ich mit Boost.Regex herum, bekomme aber kein Programm damit compiliert. Hier mal der Quellcode, den ich aus dem Boost-Tutorial habe:
Code:
#include <iostream>
#include <string>
#include <boost/regex.hpp> // Boost.Regex lib
using namespace std;
int main( ) {
std::string s, sre;
boost::regex re;
while(true)
{
cout << "Expression: ";
cin >> sre;
if (sre == "quit")
{
break;
}
cout << "String: ";
cin >> s;
try
{
// Set up the regular expression for case-insensitivity
re.assign(sre, boost::regex_constants::icase);
}
catch (boost::regex_error& e)
{
cout << sre << " is not a valid regular expression: \""
<< e.what() << "\"" << endl;
continue;
}
if (boost::regex_match(s, re))
{
cout << re << " matches " << s << endl;
}
}
}
Die Boost-Library habe ich mit dem typischen Dreiersatz "./configure, make, make install" in /usr/local/include/boost-1_34 installiert. Ergo müsste der Aufruf von
Code:
g++ -I /usr/local/include/boost-1_34 -o test test.cpp
ausreichen, um das Programm (hier test.cpp) compilieren zu können. Tut es aber nicht. Der Linker meckert und meldet mir folgendes:
Code:
/usr/bin/ld: Undefined symbols:
boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)
boost::match_results<__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> > > > > >::maybe_assign(boost::match_results<__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> > > > > > const&)
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)
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> > >::match()
boost::re_detail::get_mem_block()
boost::re_detail::put_mem_block(void*)
boost::re_detail::raise_runtime_error(std::runtime_error const&)
boost::re_detail::get_default_error_string(boost::regex_constants::error_type)
boost::re_detail::cpp_regex_traits_implementation<char>::transform_primary(char const*, char const*) const
boost::re_detail::cpp_regex_traits_implementation<char>::transform(char const*, char const*) const
typeinfo for boost::regex_error
collect2: ld gab 1 als Ende-Status zurück
Ich werde daraus nicht schlau und wende mich nun an euch. Hat irgendwer von euch schon mal das Boost-Paket zum Laufen gebracht? Wenn ja, wie? Oder gibt es funktionierende Alternativen? Vielleicht sogar in der Standard-Bibliothek?
Ich verwende jedenfalls GCC-Version 4.1.2, die C++ ansonsten anstandslos compiliert. Mit früheren Versionen hat es auch nicht geklappt.
Ich bin für jede Anregung dankbar.
Gruß,
Matthias