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

C++ en Windows XP

Estas en el tema de C++ en Windows XP en el foro de C/C++ en Foros del Web. Muy buenas les comento, tengo creado un programa en C++ que me funciona bien en mi maquina, Windows 7 Ultimate 64 bits, pero cuando lo ...
  #1 (permalink)  
Antiguo 25/06/2015, 03:43
 
Fecha de Ingreso: junio-2015
Mensajes: 7
Antigüedad: 8 años, 10 meses
Puntos: 0
Pregunta C++ en Windows XP

Muy buenas les comento,
tengo creado un programa en C++ que me funciona bien en mi maquina, Windows 7 Ultimate 64 bits, pero cuando lo llevo a la otra maquina con Windows XP donde debe funcionar parte, el problema esta que no consigo leer los argumentos (argc) enviados al main, reduciendo el programa a un simble:
cout << argc << " argumentos pasados" << endl;
y continua rompiendo...
Alguna idea por donde tirar? gracias
PD uso Eclipse y MinGW
  #2 (permalink)  
Antiguo 25/06/2015, 03:54
Avatar de iblancasa  
Fecha de Ingreso: diciembre-2012
Ubicación: España
Mensajes: 143
Antigüedad: 11 años, 4 meses
Puntos: 16
Respuesta: C++ en Windows XP

Puede que tenga que ver en que te está funcionando en un SO de 64 bits y lo estés llevando a uno de 32.

Prueba a compilar para 32 bits a ver si esa versión te vale en el XP.
  #3 (permalink)  
Antiguo 25/06/2015, 04:50
 
Fecha de Ingreso: junio-2015
Mensajes: 7
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: C++ en Windows XP

Sobre todo gracias por responder tan rapido y abrirme los ojos que ni eso se me ocurrio....
He añadido " -m32" en:
Propiedades del proyecto - C/C++ Build - Settings
tanto en en "GCC C++ Compiler" como en "MinGW C++ Linker" quedando asi "g++ -m32" pero continua igual, no se si tengo que añadir algun paquete o modificar algo mas :/
  #4 (permalink)  
Antiguo 25/06/2015, 07:46
Avatar de iblancasa  
Fecha de Ingreso: diciembre-2012
Ubicación: España
Mensajes: 143
Antigüedad: 11 años, 4 meses
Puntos: 16
Respuesta: C++ en Windows XP

No sé cómo se compila en esos programas. Busca en Google y revisa que no estés haciendo algo mal.

Usa algun debugger (en XP) para ver dónde se para.
  #5 (permalink)  
Antiguo 25/06/2015, 08:26
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: C++ en Windows XP

El problema que puedes tener es que mingw enlaza, por defecto, los ejecutables a un par de librerías propias del compilador... en la máquina en la que tienes instalado el compilador esto no lo notas porque, obviamente, estas librerías se han copiado junto con el compilador y son accesibles por tu programa.

Ahora, cuando llevas ese ejecutable a otra máquina la cosa cambia.

Tienes dos opciones:
  1. Localizas estas librerías y las transportas junto con tu ejecutable
  2. Configuras el compilador para que, en el proceso de linkado, incruste estas librerías en tu ejecutable.
En tu caso, las librerías que seguramente te falten son estas (o únicamente algúna de ellas, depende de las dependencias de tu programa):
  • LIBWINPTHREAD-1.DLL
  • LIBGCC_S_DW2-1.DLL
  • LIBSTDC++-6.DLL
O similares, como mucho cambiará el nombre de la versión.

Un saludo.
  #6 (permalink)  
Antiguo 26/06/2015, 02:28
 
Fecha de Ingreso: junio-2015
Mensajes: 7
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: C++ en Windows XP

He añadido las librerias dll y nada, imagino que tal vez necesite otras, voy a ver si consigo averiguar cuales hacen falta e investigare eso del debugger que dices idblancasa.
Gracias.
  #7 (permalink)  
Antiguo 26/06/2015, 03:23
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: C++ en Windows XP

Hay un programa, llamado dependency walker, que te permite chequear las dependencias de un ejecutable o DLL para saber si están todas localizables o no.
  #8 (permalink)  
Antiguo 26/06/2015, 12:36
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: C++ en Windows XP

¿Al menos dará algún aviso tú programa no?
  #9 (permalink)  
Antiguo 26/06/2015, 13:25
Avatar de iblancasa  
Fecha de Ingreso: diciembre-2012
Ubicación: España
Mensajes: 143
Antigüedad: 11 años, 4 meses
Puntos: 16
Respuesta: C++ en Windows XP

Cita:
Iniciado por vangodp Ver Mensaje
¿Al menos dará algún aviso tú programa no?
Es Windows... fijo que se cierra y ala.


Prueba a compilarlo en Windows XP a ver
  #10 (permalink)  
Antiguo 27/06/2015, 08:29
 
Fecha de Ingreso: junio-2015
Mensajes: 7
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: C++ en Windows XP

Ante todo gracias por el interes, creo que poco a poco voy dando con ello, os comento, como dice iblancasa el programa daba error y que debia cerrarse sin ningun tipo de informacion que me oriente, probe a compilarlo con visual studio y no se bien porque pero ahora si me indica que falta una dll, la incluyo en system32 y falta otra y otra....tedioso pero al menos tengo la sensacion de ....avanzar?; voy a ver si doy con el dependency walker que comentas eferion y os tengo informados.
Gracias por las ayudas, buen foro tenemos aqui montado, gracias de veras.
  #11 (permalink)  
Antiguo 27/06/2015, 18:28
Avatar de iblancasa  
Fecha de Ingreso: diciembre-2012
Ubicación: España
Mensajes: 143
Antigüedad: 11 años, 4 meses
Puntos: 16
Respuesta: C++ en Windows XP

¿Es este?
http://www.dependencywalker.com/
  #12 (permalink)  
Antiguo 30/06/2015, 02:57
 
Fecha de Ingreso: junio-2015
Mensajes: 7
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: C++ en Windows XP

No doy con ello, añadiendo las dll que indica el dependecy walker y compilando en XP tengo el mismo resultado que hasta ahora, he probado un simpre Hola mundo creado en bloc de notas y compilado alli y el resultado es que sale el mensaje pero termina la ejecucion del programa con que ha detectado un problema y debe cerrarse.....

Increible, no se como probe un printf en vez de cout y ya funciona, alguien se le ocurre a que se debe esto?

Última edición por d3iviz; 01/07/2015 a las 07:33
  #13 (permalink)  
Antiguo 01/07/2015, 13:20
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: C++ en Windows XP

nunca me paso eso la verdad... ¿Por qué no pruebas otra version de mingw? Ha salido mingw con gcc 5 y claro.. tambien trae el g++, además es compatible con c++14. lo he probado ayer en windows xp y me funciono sin problemas. Lo puedes bajar un instalador desde aqui: http://sourceforge.net/projects/mingw-w64/. Es para 32 and 64 bits, por probar otro g++ puede que te solvente el problema XD.
  #14 (permalink)  
Antiguo 01/07/2015, 15:44
 
Fecha de Ingreso: junio-2015
Mensajes: 7
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: C++ en Windows XP

Cita:
Iniciado por vangodp Ver Mensaje
nunca me paso eso la verdad... ¿Por qué no pruebas otra version de mingw? Ha salido mingw con gcc 5 y claro.. tambien trae el g++, además es compatible con c++14. lo he probado ayer en windows xp y me funciono sin problemas. Lo puedes bajar un instalador desde aqui: [url]http://sourceforge.net/projects/mingw-w64/[/url]. Es para 32 and 64 bits, por probar otro g++ puede que te solvente el problema XD.
Gracias, por probar que no quede, lo que no me queda claro es.....que path debo incluir? lo he instalado pero no encuentra el compilador desde la linea de comandos
  #15 (permalink)  
Antiguo 02/07/2015, 05:49
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: C++ en Windows XP

recomiendo que lo instales en la ruta C:\mingw-w64

1ºuego vas a Toolchain executables de codeblocks en el menú Settings/Compiler settings, y ponga de esta forma:
... Es la ruta de donde tienes la carpeta bin que pide en las letras rojas donde pone NOTE... Lo que al compilador le interesa, es el súper directorio donde se encuentra C:\mingw-w64\i686-5.1.0-posix-dwarf-rt_v4-rev0\mingw32\bin, entonces le indicamos su dirección C:\mingw-w64\i686-5.1.0-posix-dwarf-rt_v4-rev0\mingw32, sin el \bin, el programa ya sabe que ahí está la carpeta bin, no tenemos que indicar en la dirección, dentro esta gcc.exe y g++.exe, eso son los compiladores.

Ahora se indica al IDE los includes y las libs, son 2 carpetas que se encuentran dentro de la carpeta i686-w64-mingw32. Son las carpetas include y lib

Vamos al menú Serch directories(la pestaña anterior a Toolchain executables), y en la subpestaña llamada compiler le pones C:\mingw-w64\i686-5.1.0-posix-dwarf-rt_v4-rev0\mingw32\i686-w64-mingw32\include

NOTA: Caso no encuentre los headers cuando hagas los includes, entonces puede que tengas que añadir todas las subcarpetas, C:\mingw-w64\i686-5.1.0-posix-dwarf-rt_v4-rev0\mingw32\i686-w64-mingw32\include\c++, ...\include\ddk, ...\include\gdiplus, etc etc. Pero creo que eso no va hacer falta, lo que el compilador busca son esos archivos.h y los otros que no tienen extensión que están dentro de la carpeta c++ por ejemplo, pueden haber otros dentro de cada carpeta de esas que hay dentro de la carpeta i686-w64-mingw32.

Luego al lado de la pestaña compiler seleccionas ahora linker, y le indicamos al IDE la carpeta lib: C:\mingw-w64\i686-5.1.0-posix-dwarf-rt_v4-rev0\mingw32\i686-w64-mingw32\lib

Con todo lo de arriba creo que ya está listo.

resumiendo:
Indicar al IDE(Toolchain executables) los ejecutables que están dentro de la carpeta bin, esos son:
-C compiler=i686-w64-mingw32-gcc.exe
-C++ compiler=i686-w64-mingw32-g++.exe
-Linker for dynamic libs=i686-w64-mingw32-g++.exe
-Linker for static libs=ar.exe
-Debugger=GDB/CDB debugger : Default
-Resource compiler=windres.exe
-Make programa=mingw32-make.exe

pero a lo mejor codeblocks intenta buscar por esos nombres:
-C compiler=mingw32-gcc.exe
-C++ compiler=mingw32-g++.exe
-Linker for dynamic libs=mingw32-g++.exe
-Linker for static libs=ar.exe
-Debugger=GDB/CDB debugger : Default
-Resource compiler=windres.exe
-Make programa=mingw32-make.exe

...Y esta es la razón por la que no se configura solo. Es por que el mingw w64 le ponen diferentes nombres a algunos archivos, entonces no te queda otra que configurarlo manualmente.

Después de tener todo eso configurado es cuestión de ir a opciones avanzadas del sistema y añadir el PATH de la carpeta bin, la misma que indicamos al toolchain, o sea: C:\mingw-w64\i686-5.1.0-posix-dwarf-rt_v4-rev0\mingw32\bin.

Aun que ese paso no sea necesario, si es recomendable ya que de no hacerlo puede que al ejecutar el exe, te puede pedir que añadas ciertos dlls que están dentro de esa misma carpeta bin, que no se cuales son, ya que, o deben estar juntos al fichero ejecutable creado, o deben estar incluidos de forma estática(dentro del exe) o bien deben estar declarados en el PATH del sistema, ésta ultima forma es como si el sistema creyera que esta junto al exe aun que no lo este realmente. Si tienes problema con esa ultima forma es solo decir y nos la apañamos XD.

Creo que con eso se soluciona el problema de la instalación.

Y una cosa más, atento a las versiones, x86_x64 o x86 es 32 bits, luego está el x64 que claramente es solo para 64 bits, al parecer es para ambas plataformas, mis sistema es uno de 32 bits, y la confi esta que te paso es para ese sistema. En 64 puede variar nombres o yo que se jaja, como se trata de un instalador supongo que el te busca la version correcta según el sistema operativo, si ves diferencias haz díganos aquí para estarnos más atentos a eso. =)

Suerte
  #16 (permalink)  
Antiguo 03/07/2015, 06:15
 
Fecha de Ingreso: junio-2015
Mensajes: 7
Antigüedad: 8 años, 10 meses
Puntos: 0
Respuesta: C++ en Windows XP

Muchas gracias vangodp pero no hay manera,
instale el mingw que dices en la maquina con XP y lo mismo, los cout rompen y los printf los muestran bien.... la verdad que ni idea de donde puede venir esa falla,
lo que hice en esta maquina es instalar el codeblocks que hacia tiempo no usaba y configurarlo como dices pero me salta que libmysql.lib "No such file or directory", creo que de la otra vez que lo he tenido instalado este bicho lo recuerda, sabes como puedo eliminarlo de codeblocks?
Gracias a tod@s por todo

Etiquetas: funcion, programa, windows, xp
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 09:43.