A problem with using boost::regex

I have been a boost users for years, but this is the first time I've come
across a problem with using it. I'm posting this in the hopes that one of
you will say "oh yeah you did 'X' wrong", because I have been beating my
head against the wall with this for some time. Thanks for taking a look.
-- Michael Lindner
I have the following program:
#include "boost/regex.hpp"
#include <string>
int
main(int argc, char** argv)
{
std::string re("[123]abc");
boost::regex reg(re);
return 0;
}
It compiles and runs just fine on my Mac and Linux machines. On Windows,
however, it compiles fine, and runs fine compiled under the "Debug"
configuration. When I change that to "Release" however, it crashes with the
following stack trace:
msvcr90.dll!7858cc9d()
msvcr90.dll!7858ccb5()
dme.exe!boost::re_detail::w32_
transform() + 0xd5 bytes C++
dme.exe!boost::re_detail::w32_regex_traits_implementation<char>::transform()
+ 0x21 bytes C++
dme.exe!boost::re_detail::find_sort_syntax
::regex_data
dme.exe!boost::basic_regex
::do_assign() + 0x5f bytes C++
dme.exe!boost::basic_regex
::assign(const char * p1=0x0012ff4c, const char * p2=0x0012ff54, unsigned int f=0) Line 380 C++
dme.exe!boost::basic_regex
::basic_regex
(const std::basic_string &
dme.exe!boost::basic_regex

AMDG On 04/19/2011 01:32 PM, Michael Lindner wrote:
I would guess that there's a mismatch between the options used to compile the library and the options used to compile Boost. I assume you compiled Boost without any special options? Can you provide the compiler command line? In Christ, Steven Watanabe

Thanks for your quick reply. I would guess that too, except I would have
expected a link time error or at least for the Debug version to fail as
well. Anyway, the compile options for my little program are
/GL /I "..\boost_1_46_0" /AI "C:\src\boost_1_46_0\stage\lib" /D "WIN32" /D
"NDEBUG" /D "_CONSOLE" /FD /EHsc /MD /Fo"Release\\" /Fd"Release\vc90.pdb"
/W3 /nologo /c /Wp64 /Zi /TP /errorReport:prompt
and link options are
/OUT:"Release\dme.exe" /INCREMENTAL /NOLOGO /MANIFEST
/MANIFESTFILE:"Release\dme.exe.intermediate.manifest"
/MANIFESTUAC:"level='asInvoker' uiAccess='false'" /DEBUG
/PDB:"c:\src\dme\Release\dme.pdb" /SUBSYSTEM:CONSOLE /OPT:REF /OPT:ICF /LTCG
/DYNAMICBASE /NXCOMPAT /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib
user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib
ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib
I compiled boost with boost-jam, and I'm not sure how to find out what the
compile options are for that. If you can show me where to find that (or
where to find where to find that). Also a caveat, although I am a long time
C++ programmer I am a relative newbie on Windows.
Peace,
Michael Lindner
On Tue, Apr 19, 2011 at 5:01 PM, Steven Watanabe

I don't know what to say except it "works for me". Sounds like a typical binary compatibility issue though. Two things you could try: 1) cd into libs/regex/test and do a "bjam regex_regress release" and check the test passes OK. 2) Create a static lib project in your IDE, add libs/regex/src/*.cpp to it and set the build options the same as your .exe. Then set the define BOOST_REGEX_NO_LIB in your .exe's project settings and add the static lib as a reference and rebuild. HTH, John.

Thank you John and Steven for your help. Making a library compiled with the
same settings worked, so it appears to have been a compiler option mismatch.
I'll spend more time worrying about which option when I finish this project
and have more time.
Peace,
Mike
On Wed, Apr 20, 2011 at 5:10 AM, John Maddock
participants (3)
-
John Maddock
-
Michael Lindner
-
Steven Watanabe