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-wxmswA 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 versionDespué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.
- Descargamos wxMSW-2.9.1-Setup.exe.
- También descargamos los fuentes src
- Lo instalamos en windows4. Escogimos instalarlo en la raíz de la unidad en la carpeta wxMSW-2.9.1.
- Comprimimos la carpeta descrita en el paso anterior y la llevamos al Archlinux.
- En Archlinux tenemos una carpeta ~/abs/wxmsw/src, alli descomprimimos, la carpeta comprimida. Ahora tenemos ~/abs/wxmsw/src/wxMSW-2.9.1.
- Descargar el PKGBUILD. En nuestro caso descargamos el de la anterior version (2.8.11) y lo adaptamos para 2.9.1.
- 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
- Lo resolvemos con
- 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
- Después de navegar en internet, la solución consiste en agregar a los
parámetros de compilación
- 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
- 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.
- Nos encontramos con el primer inconveniente
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 |