Re: [Boost-users] building boost::regex lib with mingw from gnu/linux
I've executed mingw in verbose mode for the first input file from the boost regex library that fails to compile. This is the output: xxxxx@xxxxx:~/boost/boost_1_31_0/libs/regex/build$ i586-mingw32msvc-g++ --verbose -o generic/boost_regex/c_regex_traits.o -c -O2 -I../../../ ../src/c_regex_traits.cpp Reading specs from /usr/lib/gcc/i586-mingw32msvc/3.4.2/specs Configured with: /home/ron/devel/debian/mingw32/mingw32-3.4.2.20040916.1/build_dir/src/gcc-3.4.2-20040916-1/configure -v --prefix=/usr --target=i586-mingw32msvc --enable-languages=c,c++ --enable-threads --disable-multilib --enable-version-specific-runtime-libs Thread model: win32 gcc version 3.4.2 (mingw-special) /usr/libexec/gcc/i586-mingw32msvc/3.4.2/cc1plus -quiet -v -I../../../ ../src/c_regex_traits.cpp -quiet -dumpbase c_regex_traits.cpp -mtune=pentium -auxbase-strip generic/boost_regex/c_regex_traits.o -O2 -version -o /tmp/cccrEiOT.s ignoring nonexistent directory "/usr/lib/gcc/i586-mingw32msvc/3.4.2/../../../../i586-mingw32msvc/sys-include" #include "..." search starts here: #include <...> search starts here: ../../../ /usr/lib/gcc/i586-mingw32msvc/3.4.2/include/c++ /usr/lib/gcc/i586-mingw32msvc/3.4.2/include/c++/i586-mingw32msvc /usr/lib/gcc/i586-mingw32msvc/3.4.2/include/c++/backward /usr/lib/gcc/i586-mingw32msvc/3.4.2/include /usr/lib/gcc/i586-mingw32msvc/3.4.2/../../../../i586-mingw32msvc/include End of search list. GNU C++ version 3.4.2 (mingw-special) (i586-mingw32msvc) compiled by GNU C version 3.3.5 (Debian 1:3.3.5-2). GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32010 ../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' Just in case it helps i attach as well the verbose output when using c++ (succesful compilation): guest@asterix:~/boost/boost_1_31_0/libs/regex/build$ g++ --verbose -o generic/boost_regex/c_regex_traits.o -c-O2 -I../../../ ../src/c_regex_traits.cpp Reading specs from /usr/lib/gcc-lib/i486-linux/3.3.5/specs Configured with: ../src/configure -v --enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr--mandir=/usr/share/man --infodir=/usr/share/info --with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared--with-system-zlib --enable-nls --without-included-gettext --enable-__cxa_atexit --enable-clocale=gnu --enable-debug --enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i486-linux Thread model: posix gcc version 3.3.5 (Debian 1:3.3.5-5) /usr/lib/gcc-lib/i486-linux/3.3.5/cc1plus -quiet -v -I../../../ -D__GNUC__=3 -D__GNUC_MINOR__=3 -D__GNUC_PATCHLEVEL__=5 -D_GNU_SOURCE ../src/c_regex_traits.cpp -D__GNUG__=3 -quiet -dumpbase c_regex_traits.cpp -auxbase-strip generic/boost_regex/c_regex_traits.o -O2 -version -o /tmp/ccSZw3f5.s GNU C++ version 3.3.5 (Debian 1:3.3.5-5) (i486-linux) compiled by GNU C version 3.3.5 (Debian 1:3.3.5-5). GGC heuristics: --param ggc-min-expand=47 --param ggc-min-heapsize=32010 ignoring nonexistent directory "/usr/i486-linux/include" #include "..." search starts here: #include <...> search starts here: ../../.. /usr/include/c++/3.3 /usr/include/c++/3.3/i486-linux /usr/include/c++/3.3/backward /usr/local/include /usr/lib/gcc-lib/i486-linux/3.3.5/include /usr/include End of search list. as -V -Qy -o generic/boost_regex/c_regex_traits.o /tmp/ccSZw3f5.s GNU assembler version 2.15 (i386-linux) using BFD version 2.15 Thanks for the help, i do not see from the above if anything about compiler configuration is wrong. ---- Missatge original ----
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.
Sadly that didn't help, and I'm still clueless. What it comes down to is this: why are neither __GLIBCPP__ nor __GLIBCXX__ getting defined after #including a standard lib header? Just thrashing around here: what happens if you try and compile the following test program with your "mingw on linux" install (don't bother with native Linux results, I know what happens then anyway): #include <utility> #ifdef __GLIBCPP__ #error "__GLIBCPP__ is defined" #endif #ifdef __GLIBCXX__ #error "__GLIBCPP__ is defined" #endif If neither #error is triggered, then what happens if you replace the #include <utility> with #include <string> ? If neither #error is triggered can you mail be (via private email, *not* to the list) the zipped-preprocessed source for the above program, again mingw only, no need for a Linux version. There's something very strange going on here for the std lib not to get detected, I just can't see what it is. BTW is the mingw install you're using available as an rpm or something? Is this something that's easy to reproduce? Thanks, John.
participants (2)
-
atoral@dlsi.ua.es
-
John Maddock