C99 macros in math.h
Peter Ring
pri@ddf.dk
Mon Jul 1 16:08:00 GMT 2002
While trying to recompile a recent release of libxml2, I've found a problem
with math.h and libm. As far as I can see, it's like this in cygwin 1.3.11
and also in recent snapshots.
The problem is that since 2002-06-06, newlib/libc/include/math.h has defined
some ISO C99 macros for classifying floating point values, and these macros
refer to functions that were added at the same time to newlib/libm/common/,
for example in the file s_fpclassify.c. See newlib/ChangeLog.
Now, while newlib/libc/include/math.h shows up in cygwin as
/usr/include/math.h, the functions defined by
newlib/libm/common/s_fpclassify.c et.al. show up nowhere I or the linker can
find them. So when some code in libxml2-2.4.22/trionan.c looks like this:
...
#if defined(fpclassify) && defined(signbit)
/*
* C99 defines fpclassify() and signbit() as a macros
*/
*is_negative = signbit(number);
switch (fpclassify(number)) {
...
the result is undefined references at link time.
My workaround was to remove the ISO C99 macros from /usr/include/math.h, but
this is probably not the correct solution (nudge nudge, wink wink, say no
more, say no more)?
kind regards
Peter Ring
More information about the Cygwin-apps
mailing list