viernes, 23 de julio de 2010

GTK# - Windows 7 64 bits

Para poder correr un programa escrito en C#, que use GTK#, en Windows, primero es necesario instalar GTK# for .NET. Por lo que el instalador de un programa que usa GTK# debería checar la versión de GTK# ya instalada, si hay una, y si es oportuno ejecutar la instalación de GTK# antes de instalar la aplicación que depende de ella.

El problema aparece cuando estamos usando GTK# 32 bits en un Windows de 64 bits. Si la solución la creamos en MonoDevelop corriendo en Windows no habrá mayores complicaciones. Podemos compilar sin problemas en Windows 64 bits. Pero yo me he topado casos en los cuales después de compilar desde MonoDevelop corriendo en Linux 64 bits, el assembly resultado de la compilación no corre en Windows 64 bits (no hay problema si el sistema es de 32 bits). Aún si en las propiedades del proyecto figura como 32 bits. Mientras que al revés sí funciona, compilar en Windows y luego correr en Linux usando Mono.

Al intentar recompilar el programa usando MonoDevelop en Windows resulta que ahora no encontraba ninguna de las referencias. Desde GTK#, glade, etc. Nada, como si ninguna estuviera instalada. Noten que GTK# sí estaba instalada en el sistema.

Según las listas de correo del proyecto Mono se debe forzar la arquitectura como de 32 bits. Pero en mi caso, en las propiedades del proyecto ya figuraba como 32 bits.

La primera vez que tuve este problema lo solucioné yendo a las propiedades del proyecto y volviendo a seleccionar x86 en todas las páginas en las que aparece un Combo Box que permita seleccionar la arquitectura. Luego, al recompilar, se podía correr el programa de nuevo en Windows con total normalidad.

Pensé que con esto bastaba pero cuando volví a editar el proyecto desde Linux, y recompilé, al querer correrlo en Windows ocurrió lo mismo que la primera vez. E igual que la primera vez las versiones de Windows de 32 bit no se vieron afectadas, pero era imposible correr el programa en Windows de 64 bit. Intenté solucionarlo igual que lo había hecho la primera vez pero no funcionó.

Lo que sí me funcionó esta segunda vez fue borrar el ejecutable del programa y el archivo pdb que queda en el mismo directorio después de compilar. Luego abrí el archivo de solución (sln) con MonoDevelop y recompilé y ahora sí todo fue como se esperaba. No aparecieron errores relacionados con referencias faltantes a GTK#.

Quisiera poder dar más información sobre esto pero por ahora me es imposible. Simplemente diré que este problema se presenta cada vez que edito el proyecto desde Linux y lo compilo. El resultado de esa compilación corre bien tanto en Linux 32/64 bit como en Windows de 32 bit. Pero para poder correr el programa en Windows 64 bit debo hacer lo que indico más arriba y recompilar, de lo contrario obtengo un montón de errores de referencias a GTK# que no se pueden satisfacer.

Los archivos pdb sólo se generan si compilamos con el objetivo debug del proyecto. O pasando /debug al compilador.

Algunos enlaces que pueden resultar útiles:

0 comentarios:

Publicar un comentario