Hi
I have built the StlPort 5.1.0 shared dlls and boost 1_33_1
Shared dlls successfully.
The Platform is MSVC8.
I created a sample projeth with just on file with code:
#include <boost/regex.hpp>
bool testregex( const char* StringToMatch )
{
return(
boost::regex_match( StringToMatch, boost::regex("[A-Z]+") ));
}
int main (int argc, char *argv[])
{
bool trial = testregex(
"hello how r u ?");
return 1;
}
Compilation succeeds but I get two Linker errors
(BOOST_DYN_LINK is defined)
Main.obj : error LNK2001:
unresolved external symbol "public: bool __thiscall
boost::re_detail::perl_matcher<char const *,class
stlp_std::allocator<struct boost::sub_match<char const *> >,struct
boost::regex_traits<char,class boost::w32_regex_traits<char> >
>::match(void)"
(?match@?$perl_matcher@PBDV?$allocator@U?$sub_match@PBD@boost@@@stlp_std@@U?$regex_traits@DV?$w32_regex_traits@D@boost@@@boost@@@re_detail@boost@@QAE_NXZ)
1>Main.obj : error
LNK2001: unresolved external symbol "public: __thiscall
boost::re_detail::perl_matcher<char const *,class
stlp_std::allocator<struct boost::sub_match<char const *> >,struct
boost::regex_traits<char,class boost::w32_regex_traits<char> > >::perl_matcher<char
const *,class stlp_std::allocator<struct boost::sub_match<char const
*> >,struct boost::regex_traits<char,class
boost::w32_regex_traits<char> > >(char const *,char const *,class
boost::match_results<char const *,class stlp_std::allocator<struct
boost::sub_match<char const *> > > &,class
boost::basic_regex<char,struct boost::regex_traits<char,class
boost::w32_regex_traits<char> > > const &,enum
boost::regex_constants::_match_flags,char const *)"
(??0?$perl_matcher@PBDV?$allocator@U?$sub_match@PBD@boost@@@stlp_std@@U?$regex_traits@DV?$w32_regex_traits@D@boost@@@boost@@@re_detail@boost@@QAE@PBD0AAV?$match_results@PBDV?$allocator@U?$sub_match@PBD@boost@@@stlp_std@@@2@ABV?$basic_regex@DU?$regex_traits@DV?$w32_regex_traits@D@boost@@@boost@@@2@W4_match_flags@regex_constants@2@0@Z)
So it cannot find the constructor for perl_matcher and the
declaration for regex_match.
I found a similar post on Boost : http://www.nabble.com/-regex-Using-regex-in-x64-exe-with-VC-8.0-t2088061.html#a5755051
The suggested solutions on this post are:
1) check for
intermixing of x86 and x64 : I am on 32 bit platform.. so intermixing
does not apply
2) add regex source
code and compile ( using BOOST_REGEX_NO_LIB) : I get the errors for stdext
namespace
1>C:\boost_1_33_1\boost/regex/v4/regex_workaround.hpp(145)
: error C2653: 'stdext' : is not a class or namespace name
1>
C:\boost_1_33_1\boost/regex/v4/regex_format.hpp(562) : see reference to
function template instantiation 'OutputIterator boost::re_detail::copy<const
charT*,OutputIterator>(InputIterator,InputIterator,OutputIterator)' being
compiled
1>
with
1>
[
1>
OutputIterator=boost::re_detail::string_out_iterator<stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>>,
1>
charT=wchar_t,
1>
InputIterator=const wchar_t *
1>
]
1>
C:\boost_1_33_1\boost/regex/v4/match_results.hpp(160) : see reference to
function template instantiation 'OutputIterator
boost::re_detail::regex_format_imp<boost::re_detail::string_out_iterator<S>,const
wchar_t*,stlp_std::allocator<_Tp>,_CharT,boost::re_detail::trivial_format_traits<charT>>(OutputIterator,const
boost::match_results<BidiIterator> &,const charT *,const charT
*,boost::regex_constants::match_flag_type,const traits &)' being compiled
1>
with
1>
[
1>
OutputIterator=boost::re_detail::string_out_iterator<stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>>,
1>
S=stlp_std::basic_string<wchar_t,stlp_std::char_traits<wchar_t>,stlp_std::allocator<wchar_t>>,
1>
_Tp=boost::sub_match<const wchar_t *>,
1>
_CharT=wchar_t,
1>
charT=wchar_t,
1>
BidiIterator=const wchar_t *,
1>
traits=boost::re_detail::trivial_format_traits<wchar_t>
1>
]
1>
C:\boost_1_33_1\boost/regex/v4/match_results.hpp(156) : while compiling class
template member function 'stlp_std::basic_string<_CharT,_Traits,_Alloc>
boost::match_results<BidiIterator>::format(const
stlp_std::basic_string<_CharT,_Traits,_Alloc>
&,boost::regex_constants::match_flag_type) const'
1>
with
1>
[
1>
_CharT=wchar_t,
1>
_Traits=stlp_std::char_traits<wchar_t>,
1>
_Alloc=stlp_std::allocator<wchar_t>,
1>
BidiIterator=const wchar_t *
1>
]
1>
C:\boost_1_33_1\boost/regex/v4/instances.hpp(86) : see reference to class
template instantiation 'boost::match_results<BidiIterator>' being
compiled
1>
with
1>
[
1>
BidiIterator=const wchar_t *
1>
]
1>C:\boost_1_33_1\boost/regex/v4/regex_workaround.hpp(145)
: error C3861: 'unchecked_copy': identifier not found
Can anyone suggest a solution??
Thanks in advance
Manish
Mangal
Software
Engineer
atlas® search
Partner
for Results
206-816-8349 // phone
Manish.Mangal@AtlasSolutions.com // email
www.AtlasSolutions.com // web