2017-08-10 7 views
-5

Récemment, j'ai rencontré un problème très ennuyeux. J'ai besoin de compiler d'anciens codes C++ qui ont été compilés avec une très ancienne version g ++ 4.1.2.Comment faire g ++ ne distingue pas <string> et <string.h>

Je ne pouvais pas trouver de version g ++ aussi ancienne maintenant, alors j'ai utilisé g ++ 4.4.7 pour le compiler, mais il y avait beaucoup d'erreurs comme error: ‘snprintf’ was not declared in this scope.

Après quelques travaux, j'ai trouvé g ++ 4.1.2 ne distinguent pas <string> de <string.h>, également <stdio> de <stdio.h>, etc .. Mais g ++ 4.4.7 T-ELLE. Donc ces erreurs sont arrivées.

Pour certaines raisons, je ne pouvais pas modifier l'ancien code source. Y at-il un moyen qui peut faire le plus récent g ++ ignorer la différence entre <string> et <string.h>? Créez un répertoire dans votre projet (appelons le foo);

+2

'' srting' et string.h' sont différents en-têtes. Si la version antérieure ne se différencie pas, cela peut probablement être considéré comme un bug. Je ne peux pas voir que vous pouvez dire 'g ++' de ne pas les différencier. – taskinoor

+0

Comme solution de contournement, vous pouvez forcer gcc à toujours inclure '' avec '-include' – Jarod42

+0

Je suis sûr que gcc 2.95.3 a bien compris, donc je ne pense pas qu'il y ait eu une régression autour de 4.1.2. Au lieu de cela, je pense que vous mélangez des règles C et C++. Les en-têtes C++ _may_ incluent d'autres en-têtes. En particulier, '' _may_ comprend ''. Vous ne pouvez pas compter sur cela de toute façon. – MSalters

Répondre

0
  1. Créer foo/string et en tant que liens symboliques vers l'en-tête qui fonctionne;
  2. Ajoutez -Ifoo aux indicateurs de compilation de GCC.

Les deux liens symboliques seront désormais utilisés lorsque vous incluez <string> ou <string.h> et seront redirigés vers l'en-tête du système réel.

0

J'ai vu string et string.h habituellement implémenté comme des fichiers (le premier nom de fichier string est sans extension).

ne pas inclure la norme include_path devez préciser: -nostdinc