Votre système a probablement les en-têtes C à un endroit du système de fichiers, et les en-têtes C++ à un autre. Connaissez-vous la liste actuelle des répertoires recherchés pour les en-têtes système ? (En fait, l'implémentation n'est pas obligée d'avoir des fichiers d'en-tête système, bien que toutes celles que je connais en aient. La norme C++ a des exigences sur ce que l'instruction #include <cmath>
doit faire, mais pas sur la manière dont il doit être fait).
Dans votre réponse, vous parlez de variations entre C++ sous Linux et Windows. Celles-ci ne sont pas spécifiques au système d'exploitation, mais plutôt à l'implémentation. Vous utilisez probablement Visual C++ sous Windows et autre chose sous Linux (ne serait-ce que parce que VC++ ne fonctionne que sous Windows). Ils peuvent fonctionner différemment dans les configurations par défaut.
En fait, #include <math.h>
devrait être comme #include <cmath>
sauf que math.h devrait déplacer tous ses noms de fonctions et autres dans l'espace de noms std: :. Si cela ne se produit pas dans votre système Linux C++, il y a un problème. Malheureusement, vous n'avez pas fourni assez d'informations pour comprendre ce qui se passe.