Foros del Web » Programación para mayores de 30 ;) » C/C++ »

iostream.h en GCC

Estas en el tema de iostream.h en GCC en el foro de C/C++ en Foros del Web. Estoy teniendo un problema al compilar en C++ con GCC 4.1.2 Básicamente estoy probando el gcc, haciéndolo compilar y linkear el siguiente código: Código: #include ...
  #1 (permalink)  
Antiguo 29/04/2007, 22:44
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
iostream.h en GCC

Estoy teniendo un problema al compilar en C++ con GCC 4.1.2

Básicamente estoy probando el gcc, haciéndolo compilar y linkear el siguiente código:
Código:
#include <iostream>

using namespace std;

int main() {
        cout << "Probando el gcc\n" << endl;
        return 0;
}
El problema es que al compilarlo, me da unos errors de que no existen varios objetos. Por ejemplo:

Cita:
cliente.C:(.text+0x23): undefined reference to `std::ios_base::Init::Init()'
/tmp/ccEHqSXO.o: In function `__tcf_0':
cliente.C:(.text+0x6c): undefined reference to `std::ios_base::Init::~Init()'
Se me ocurrió cambiar la librería iostream por la iostream.h, pero los resultados fueron peores. Me tiraba los mismos errores que antes, sumado a la advertencia que las librerías .h están deprecated.

El tema es que g++ si lo compila, me da la advertencia de deprecated, pero me genera el ejecutable.

Cuando lo compilo con gcc:
gcc -o cliente cliente.C

y con g++:
g++ -o cliente cliente.C

Estoy trabajando con Ubuntu Feisty i386

El problema es que me gustaría poder compilar con gcc en ves de g++, ya que gcc es omnipresente en casi todos los sistemas Linux; g++ no.

Saludos
  #2 (permalink)  
Antiguo 29/04/2007, 23:59
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 19 años, 11 meses
Puntos: 74
Re: iostream.h en GCC

Podrias probar un par de cosas, usar -x c++ en la linea de comandos de gcc, usar cc o tambien cambiar la extension del archivo (veo que es la de C) a una de C++ (creo que usan .cc o .cpp).
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 30/04/2007, 11:12
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Re: iostream.h en GCC

Gracias por tu tiempo.

Inicialmente había probado con explicitarle a gcc que el lenguaje era C++, pero daba los mismos resultados.

Probé con cc, pero también pasó exactamente lo mismo. En teoría, las extensiones .C .cc .cxx son reconocidas por gcc como C++, de todas maneras al cambiarle la extensión, no cambiaba los resultados de la compilación.

Compilé con la opción v (gcc -v o...) para ver porqué compilaba bien con g++ y no con gcc.

Al parecer el problema está cuando el compilador llama a la herramienta collect2, g++ no usa los mismos parámetros que gcc. La cantidad de parámetros es muy grande como para postearla aquí. Pero básicamente la diferencia está en que g++ usa el parámetro -lstdc++ y gcc no lo hace.

En el resto del proceso, las 2 herramientas hacen exactamente lo mismo, por lo que la solución sería llamar a gcc indicándole que le pase ese parámetro a collect2 cuando lo llame.

Me rompí la cabeza un rato para hacerlo y no pude, así que terminé usando g++ . Cuando tenga un poco más de ganas voy a ver si se puede hacer con gcc.

Saludos

Última edición por TolaWare; 30/04/2007 a las 11:20
  #4 (permalink)  
Antiguo 30/04/2007, 18:47
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Re: iostream.h en GCC

En realidad lo que sicede es que al usar g++,éste linkea la libreria estandar de C y C++ y tu gcc al parecer solo enlaza la libreria estandar de C.

Aun asi, eso me desoncicerta mucho(a mi tambien me pasa tu caso) y seria interesante checar la pagina de GNU/GCC para ver que explicacion tienen a este problema que inclusive se da en gcc-3.4.

Teoriacamente al llamar a gcc, éste deberia reconocer que tipo de compilacion realizar si una para solo C o para C++(que incluye C).

Saludos
  #5 (permalink)  
Antiguo 30/04/2007, 22:54
Avatar de TolaWare
Colaborador
 
Fecha de Ingreso: julio-2005
Mensajes: 4.352
Antigüedad: 18 años, 9 meses
Puntos: 24
Re: iostream.h en GCC

Bueno, luego de quemar algunas neuronas pensando, se me ocurrió pasarle a gcc directamente el parámetro en cuestión, digamos algo así:

gcc -lstdc++ -o cliente cliente.cc

Cuál fue mi sorpresa al ver que gcc compilaba el programa sin siquiera quejarse con algún warning.

Sin siquiera haberme alegrado por lograr mi objetivo (ya que el bicho de la curiosidad siempre ataca), me puse a investigar el porqué de este hecho.

Luego de razonar y leer un poco (man gcc ), me di cuenta que al pasarle como opción -lstdc++, lo que en realidad estoy haciendo es especificar el uso de la librería stdc++ (sintaxis::= -l<libreria>).

Al no pasarle ninguna librería a gcc, este toma por defecto la stdc, la cual no hace falta mucho cerebro para darse cuenta que es la librería estándar de C, y que gcc la usa por defecto.

Conclusión, INSTRU estaba totalmente acertado.

Espero que mis comentarios y explicaciones sirvan de algo a alguien

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:39.