Your system likely has the C headers in one place in the file system, and the C++ headers in another. Are you familiar with the actual list of directories searched for system headers? (Actually, the implementation is not required to have system header files, although all the ones I'm familiar with do. The C++ standard has requirements on what the statement #include <cmath>
has to do, but not on how it has to be done.)
In your answer, you talk about variations between C++ on Linux and Windows. These are not OS-specific, but rather implementation-specific. You're probably using Visual C++ on Windows and something else on Linux (if only because VC++ runs only on Windows). They may work differently in default configurations.
In fact, #include <math.h>
should be like #include <cmath>
, except that math.h should move all its function names and such into the std:: namespace. If this isn't happening in your Linux C++ system, there's a problem. Unfortunately, you haven't provided nearly enough information to figure out what's happening.