…you may have to eat the C++ programming language standard (may be with the C one together, brrr) half-baked or even raw.
DoubleBits.cpp: In static member function 'static double geos::index::quadtree::DoubleBits::powerOf2(int)': DoubleBits.cpp:51: error: 'memcpy' was not declared in this scope DoubleBits.cpp: In constructor 'geos::index::quadtree::DoubleBits::DoubleBits(double)': DoubleBits.cpp:94: error: 'memcpy' was not declared in this scope
StringTokenizer.cpp: In member function 'int geos::io::StringTokenizer::nextToken()': StringTokenizer.cpp:75: error: 'strtod' was not declared in this scope StringTokenizer.cpp: In member function 'int geos::io::StringTokenizer::peekNextToken()': StringTokenizer.cpp:123: error: 'strtod' was not declared in this scope
These functions come from the C/C++ Standard Library, so how they could be missing? They are because the files reported above do not include standard header
<cstring>. GEOS 3.0.0
had used to compiled using GCC without problems, what happened? GCC is just being aligned to the standards closer and closer, so it becomes strict and unforgiving.
There is a lot of C/C++ code of FOSS written in sloppy way being compiled in relaxed mode without use of strict compilation flags. Having in mind number of bugs reported after GCC 4.3 was released, I presume dark clouds are coming again with just released GCC 4.4.0 and upcoming 4.5.0. It’s always a good idea to not to trust chain or implicit inclusion of standard headers - wherever
std::malloc is used
<cstdlib> must be included, same about
<vector> and so on.