2010-02-08 3 views
8

J'ai une machine 32 bits et j'utilise Ubuntu 9.10 dessus. J'ai le dernier compilateur gcc. Le problème que je suis confronté est que j'ai une bibliothèque développée en 2002. Le code est correct, mais quand je tente de le construire, il me donne des erreurs comme iostream.h ne peut pas être trouvé, erreur: fstream.h: Non tel fichier ou répertoire etc etc. Il y a beaucoup de fichiers donc je ne peux pas les changer.iostream.h, fstream.h est introuvable

Ces erreurs peuvent-elles être résolues si elles sont résolues? Installez gcc 3.0? Si oui, comment l'installer sur mon compilateur gcc existant.

+0

Pouvez-vous poster le code (juste la section d'inclusion), inclure le chemin, etc? –

+1

utilisez-vous gcc ou g ++? – zdav

Répondre

4

Vous avez affaire à une bibliothèque C++ pré-standard, et vous l'avez vu ne pas compiler avec un compilateur standard. Vous pouvez toujours essayer le work-around rapide en créant, disons, iostream.h avec les deux lignes #include <iostream> et using namespace std;, et cela peut fonctionner. Ce n'est pas fiable, et peut causer des bogues difficiles à trouver qui apparaîtront à un moment inopportun.

S'il s'agit d'une bibliothèque d'un autre emplacement, vous pouvez voir si elle a été mise à jour.

La chose à réaliser est que le code n'est plus correct. Il peut avoir été correct pour une certaine mise en œuvre à un moment donné, mais ce n'est pas le cas maintenant. (Êtes-vous sûr que c'était à l'origine pour gcc 3.0? Les compilateurs pré-standard étaient, bien, pas standard, et avaient beaucoup de bizarreries, en évitant les normes.) Si vous installez le système original, vous pourriez être incapable pour s'interfacer correctement avec la bibliothèque, et le nouveau code ne fonctionnera pas. Une bibliothèque qui n'interface pas avec le code moderne est d'utilisation limitée. Sinon, vous allez devoir abandonner l'idée que vous ne pouvez pas changer la bibliothèque et la convertir en C++ standard. Il y aura probablement quelques bogues qui sont assez faciles à corriger (comme la portée dans for (int i = 0;...)), et peuvent être des problèmes plus subtils. Le code peut avoir été correct pour un certain compilateur, mais ce n'est pas le cas maintenant.

1

Pourquoi toutes les instances de

#include <iostream.h> 

ne pouvait pas vous écrire un script pour rechercher et remplacer par

#include <iostream> 

Et la même chose pour les autres?

Mise à jour: Je suis d'accord avec l'autre réponse et les commentaires ci-dessous ... Je vais laisser cette réponse que parce que je ne pense pas que la déclaration

There are lots of files hence I cannot change them

est valide :)

+0

Parce qu'il ne mettrait pas à jour le code qui utilise les en-têtes. Les bibliothèques pré-standard et standardisées ont typiquement de nombreuses incompatibilités. –

+0

@John - Je l'ai essayé une fois dans environ 2003, je pense, avec du code C++ de 1992 vintage. Il s'est avéré être un peu plus que ça. Les classes ne sont pas les mêmes. Et une fois compilé, il s'est accroché au moment de l'exécution, probablement parce que la condition de fin de flux était communiquée différemment. Quoi qu'il en soit, j'ai abandonné l'effort. –

4

Les fichiers fstream.h et similaires sont des versions pré-standard des fichiers fstream et des fichiers similaires spécifiés par la norme C++ et fournis avec les compilateurs modernes. Les deux ne sont généralement pas compatibles. Franchement, si personne n'a mis à jour la bibliothèque pour se conformer à la norme au cours des 8 dernières années, il est peu probable qu'elle en vaille la peine.

+0

Bon point! Qui peut dire quels autres problèmes resteront même si la mise à jour inclut. –

+0

@ John Weldon: Selon mon expérience, il peut y avoir des problèmes méchants et difficiles à résoudre. –

Questions connexes