Меnu:


La distribución que usamos para desarrollar es Archlinux.

Un poco de Historia

Cuando comenzamos a desarrollar en wxWidgets, aproximadamente en el año 2007, lo hicimos en ubuntu, tuvimos que descargar y compilar el wxWidgets1. Ya por el año 2008 nos mudamos a Archlinux y también a fedora (en la oficina). La combinación Archlinux/wxWidgets es excelente gracias al yaourt. Con ayuda de yaourt es sencillisimo compilar muchas herramientas que de otro modo, nos tomaría mas tiempo. Sobretodo el resolver el tema de las dependencias. Definitivamente el yaourt es una de las bondades del Archlinux.

Instalar wxWidgets en Archlinux es fácil se hace con el siguiente comando:

sudo pacman -S wxgtk.

Otra facilidad que tiene el Archlinux es que se puede también instalar el wxMSW también con una sola instrucción.

yaourt -S mingw32-wxmsw
A continuación les muestro las versiones disponibles de wxMSW2 en Archlinux:
aur/mingw32-wxmsw 2.8.9-1 (Out of Date) (2)
    wxMSW is a port of wxWidgets for MS Windows
aur/ mingw32-wxmsw-static 2.8.11-1
    wxMSW is a port of wxWidgets for MS Windows. Static version
Después de instalar la versión mingw32-wxmsw-static 2.8.11-1. nos apresuramos a compilar y ejecutar nuestro sistema de inventario en windows XP, para percatarnos que nuestra primera pantalla la del login no tenia barra superior3.

Que hacer?, decidimos instalar la ultima versión 2.9.1, pero dicha versión en la pagina de wxWidgets solo esta disponible para windows.

La decisión

Decidimos intentar compilar con 2.9.1. A pesar de que solo se distribuye para windows.

  1. Descargamos wxMSW-2.9.1-Setup.exe.
  2. También descargamos los fuentes src
  3. Lo instalamos en windows4. Escogimos instalarlo en la raíz de la unidad en la carpeta wxMSW-2.9.1.
  4. Comprimimos la carpeta descrita en el paso anterior y la llevamos al Archlinux.
  5. En Archlinux tenemos una carpeta ~/abs/wxmsw/src, alli descomprimimos, la carpeta comprimida. Ahora tenemos ~/abs/wxmsw/src/wxMSW-2.9.1.
  6. Descargar el PKGBUILD. En nuestro caso descargamos el de la anterior version (2.8.11) y lo adaptamos para 2.9.1.
  7. Comenzar a compilar con el comando5:

    makepkg

    Listaremos cada uno de los problemas que nos iremos encontrando durante la compilación:

    • Nos encontramos con el primer inconveniente

      PKGBUILD: line 32: ./configure: Permission denied

      • Lo resolvemos con

        chmod 755 configure

    • Segundo inconveniente

      config.status: error: cannot find input file: contrib/Makefile.in

      • Echando un vistazo a los fuentes[?], nos encontraremos con que dicha carpeta esta dentro de src/tiff. Reemplazar con los fuentes del paso 2 toda la carpeta tiff 6.
    • Tercer inconveniente:

      ./src/expat/lib/xmlparse.c:97:2: error: #error memmove does not exist on this platform, nor is a substitute available

      • Después de navegar en internet, la solución consiste en agregar a los parámetros de compilación

        -O2 -fno-strict-aliasing -DHAVE_MEMMOVE=1 -DXML_DTD

        Para ello debemos ubicarnos en la carpeta src/wxMSW-2.9.1 y la sentencia seria la siguiente:

        i486-mingw32-gcc -c -o wxexpat_xmlparse.o -DNDEBUG -I./src/expat -D_LARGEFILE_SOURCE=unknown -I~/abs/wxmsw/src/wxMSW-2.9.1/lib/wx/include/i486-mingw32-msw-unicode-2.9 -I./include -mthreads -Wall -Wundef -mthreads -march=i686 -mtune=generic -O2 -fno-strict-aliasing -DHAVE_MEMMOVE=1 -DXML_DTD -pipe ./src/expat/lib/xmlparse.c

    • Cuarto inconveniente:

      Creating library file: ~/abs/wxmsw/src/wxMSW-2.9.1/lib/libwx_baseu_xml-2.9-i486-mingw32.dll.a ~/abs/wxmsw/article_tmp/src/wxMSW-2.9.1/lib/libwxexpat-2.9-i486-mingw32.a(wxexpat_xmlparse.o):xmlparse.c:(.text+0x7ab1): undefined reference to `_XmlPrologStateInitExternalEntity'

      • Después de inspeccionar el código nos damos cuenta de que el error esta en el archivo xmrole.c. La solución consiste en recompilar este archivo del mismo modo que lo hicimos en el anterior problema.

        -O2 -fno-strict-aliasing -DHAVE_MEMMOVE=1 -DXML_DTD

        i486-mingw32-gcc -c -o wxexpat_xmlrole.o -DNDEBUG -I./src/expat -D_LARGEFILE_SOURCE=unknown -I~/abs/wxmsw/src/wxMSW-2.9.1/lib/wx/include/i486-mingw32-msw-unicode-2.9 -I./include -mthreads -Wall -Wundef -mthreads -march=i686 -mtune=generic -O2 -fno-strict-aliasing -DHAVE_MEMMOVE=1 -DXML_DTD -pipe ./src/expat/lib/xmlrole.c

Finalmente. Ya tenemos compilado wxMSW 2.9.1. Listo para ser instalado.

Así lo hicimos nosotros, luego de instalarlo, compilamos con esta versión (2.9.1), probamos nuevamente nuestro sistema de inventario en windows, y el bug3 anteriormente mencionado, que nos llevo a compilar la versión 2.9.1. ya no estaba. Sean felices codificando


1. El compilar en ubuntu nos ayudo a saber que se podia distribuir el applicativo con librerias estaticas y con librerias dinamicas.

2. No esta disponible para instalar la versión 2.9.1

3. Este es un bug de la versión 2.8.11 de wxMSW.

4. Debe haber alguna manera de no necesitar instalarlo en windows

5. En este momento no pensábamos, que este proceso tomaría mas de una hora en nuestro procesador Pentium M

6. Si reemplazan solo contrib encontraran otros errores.

Last change: 08.11.2011 15:48

blog comments powered by Disqus