2010-02-08 15 views
8

Tengo una máquina de 32 bits y estoy ejecutando Ubuntu 9.10 en ella. Tengo el último compilador de gcc. El problema que estoy enfrentando es que tengo una biblioteca desarrollada en 2002. El código es correcto, pero cuando intento construirlo, me da errores como iostream.h no se puede encontrar, error: fstream.h: No hay tal archivo o directorio, etc. Hay muchos archivos, por lo tanto, no puedo cambiarlos.iostream.h, fstream.h no se puede encontrar

¿Se pueden resolver estos errores si resuelto instalo gcc 3.0? En caso afirmativo, cómo instalarlo sobre mi compilador gcc existente.

+0

¿Puedes publicar el código (solo en la sección de incluir), incluir la ruta, etc.? –

+1

¿estás usando gcc o g ++? – zdav

Respuesta

4

Está tratando con una biblioteca C++ pre-estándar, y ha visto que no se compilará con un compilador estándar. Siempre puede intentar la solución rápida creando, digamos, iostream.h con las dos líneas #include <iostream> y using namespace std;, y eso puede funcionar. No es confiable y puede causar errores difíciles de encontrar que aparecerán en un momento inconveniente.

Si se trata de una biblioteca de otro lugar, podría ver si se ha actualizado.

Lo que hay que tener en cuenta es que el código ya no es correcto. Puede haber sido correcto para alguna implementación en algún momento, pero no es ahora. (¿Está seguro de que originalmente era para gcc 3.0?) Los compiladores preestandarizados no eran estándar y tenían muchas rarezas. Evitar eso es para qué sirven los estándares.) Si instala el sistema original, es posible que no pueda para interactuar con la biblioteca correctamente, y el nuevo código no va a funcionar. Una biblioteca que no interactúa con el código moderno es de uso limitado.

De lo contrario, tendrá que abandonar la actitud de que no puede cambiar la biblioteca y convertirla a C++ estándar. Es probable que haya bastantes errores que sean bastante fáciles de corregir (como el alcance en for (int i = 0;...)), y pueden haber algunos problemas más sutiles. El código puede haber sido correcto para cierto compilador, pero no es ahora.

1

Por qué no podría escribir una secuencia de comandos para buscar y reemplazar todas las instancias de

#include <iostream.h> 

con

#include <iostream> 

Y lo mismo para los demás?

actualización: estoy de acuerdo con la otra respuesta, y los comentarios a continuación ... voy a dejar esta respuesta, porque aunque no creo que la declaración

There are lots of files hence I cannot change them

es válido :)

+0

Porque no actualizaría el código que usa los encabezados. Las bibliotecas preestandarizadas y estandarizadas típicamente tenían numerosas incompatibilidades. –

+0

@John - Lo intenté una vez en 2003, creo, con un código C++ de 1992 vintage. Resultó ser un poco más que eso. Las clases no son lo mismo. Y una vez que se compiló, se colgó en tiempo de ejecución, probablemente debido a que la condición de fin de ciclo se comunicaba de manera diferente. De todos modos, abandoné el esfuerzo. –

4

El fstream.h y archivos similares son versiones pre-estándar del fstream y archivos similares especificados por el Estándar C++ que vienen con compiladores modernos. Los dos no son típicamente compatibles. Francamente, si nadie ha actualizado la biblioteca para cumplir con el estándar en los últimos 8 años, es poco probable que valga la pena usarla.

+0

¡Buen punto! ¿Quién puede decir qué otros problemas se mantendrán incluso si actualiza los incluye? –

+0

@ John Weldon: En mi experiencia, puede haber algunos problemas desagradables y difíciles de solucionar. –

Cuestiones relacionadas