Re: [Boost-users] building boost::regex lib with mingw from gnu/linux
Hi, I would like to use the boost regex lib in a c++ program. This is being developed under gnu/linux (Debian-Sarge Kernel 2.4.27) with gcc 3.3.5. Also, we are creating binaries for Win32 by cross compiling with MinGW (i586-mingw32msvc-g++ (GCC) 3.4.2 (mingw-special)).
Thus, i have to build the boost::regex library for both gnu/linux and win32. There was no problem to get the linux version (it is included in Debian, and anyway the source succeded to compile), but i'm having trouble to compile the win version.
I compile from
/boost_1_31_0/libs/regex/build by using generic.mak (make -f generic.mak). in this file i've just added
lines: CXX=i586-mingw32msvc-g++ LINKER=i586-mingw32msvc-ar
This is the output i obtain:
xxxxx@xxxxx:~/boost/boost_1_31_0/libs/regex/build$ make -f generic.mak i586-mingw32msvc-g++ -o generic/boost_regex/c_regex_traits.o -c - O2 -I../../../ ../src/c_regex_traits.cpp ../src/c_regex_traits.cpp: In static member function `static size_t boost::c_regex_traitsboost::regex_wchar_type::strnarrow(char*, size_t, const boost::regex_wchar_type*)': ../src/c_regex_traits.cpp:1052: error: `wcstombs' is not a member of `std' make: *** [generic/boost_regex/c_regex_traits.o] Error 1
any clues about what i'm doing wrong?
Looks like a configuration issue: can you try compiling and *running* the program libs/config/test/config_info.cpp, in the output at the end you should see:
BOOST_USER_CONFIG =
BOOST_COMPILER_CONFIG ="boost/config/compiler/gcc.hpp" BOOST_STDLIB_CONFIG ="boost/config/stdlib/libstdcpp3.hpp" BOOST_PLATFORM_CONFIG ="boost/config/platform/win32.hpp" and then:
BOOST_NO_CWCHAR [no value] BOOST_NO_CWCTYPE [no value] BOOST_NO_HASH [no value] BOOST_NO_MS_INT64_NUMERIC_LIMITS [no value] BOOST_NO_SLIST [no value] BOOST_NO_STD_WSTREAMBUF [no value] BOOST_NO_STD_WSTRING [no value] BOOST_NO_SWPRINTF [no value]
If these aren't correct then we'll have to try and diagnose the
This is the end of the output for config_info (using mingw32):
Boost version 103100
BOOST_USER_CONFIG =
somehow (attach the full output from the config_info program if you can).
If you just want to hack around then issue, then just add - DBOOST_NO_WREGEX to the compile command line,
John.
This is the end of the output for config_info (using mingw32):
Boost version 103100 BOOST_USER_CONFIG =
BOOST_COMPILER_CONFIG ="boost/config/compiler/gcc.hpp" BOOST_PLATFORM_CONFIG ="boost/config/platform/win32.hpp"
from what you said i do not see here BOOST_STDLIB_CONFIG , neither appear some of the following you pointed out:
is there something wrong with the compiler or my makefile?
The Boost config system isn't detecting that your std C++ lib is libstdc++3, it uses: #include <utility> #if whatever... #elif defined(__GLIBCPP__) || defined(__GLIBCXX__) // must be libstdc++3... // etc for this purpose. Now I know that "real" mingw32 on win32, does define one or other of these macros (depending upon it's version), so I'm perplexed why it wouldn't be picking this up when cross-compiling under Linux. Maybe by running the compiler in "verbose" mode you can figure out what's happening, is there any chance that your compiler's include paths are setup incorrectly? Perplexed yours, John Maddock.
participants (2)
-
atoral@dlsi.ua.es
-
John Maddock