martes, 18 de marzo de 2008

Mono - HTTP 500. System.DllNotFoundException: gdiplus.dll



Intentando de correr una aplicacion en Mono+FreeBSD obtuve el siguiente mensaje de error:

HTTP 500. System.DllNotFoundException: gdiplus.dll

Y en otras paginas tambien obtuve este error:

Parser Error: Color Red is not a valid color



Ambos errores son relacionados y se resuelven con la misma medicina.

Ahora bien, detallemos que sucede, el primer error me habla que me falta una dll llamada gdiplus.dll, pero que es esto ?

Microsoft GDI+ (gdiplus.dll) es una librería que contiene funciones básicas relacionadas con el sistema de interfaz gráfico de Windows (GDI) Graphical Device Interface. Gracias a este sistema Windows puede crear y mostrar objetos en 2D.

Si nuestra aplicacion web esta usando librerias de manejo de imagenes, para manipular su
tamaño, preservar la calidad al momento de desplegarla utilizando otras dimensiones, etc.
Nuestra aplicacion esta haciendo un llamado a esta libreria. En mi caso, mi proyecto .net
hace algunas de estas cosas

En FreeBSD esta libreria no viene con la instalacion de Mono, tenia que instalarla primero antes
mapiar la DLL. La libreria esta ubicada en /usr/ports/X11/x11-toolkit/libgdiplus

procedemos a instalar
make install clean

Pero me encontre con una sorpresa, existia un conflicto de instalacion

/usr/X11R6 exists, but it is not a symlink. Installation cannot proceed.
This looks like an incompletely removed old version of X. In the current version, /usr/X11R6 must be a symlink if it exists at all.Please read /usr/ports/UPDATING (entry of 20070519) for the procedure to upgrade X.org related ports.
*** Error code 1

Al parecer, segun el mensaje de error, nos manda actualizar las X, pero al ver las dependencias del paquete libgdiplus dice que la version de X es la misma que tengo instalada, ademas me parecio problematico actualizar las X ya que otros paquetes dependian de esta misma version y adicional a esto el mensaje de error da una pista de como resolver el problema sin tener que actualizar: /usr/X11r6 debe ser un enlace de sistema, no un directorio real.

Solucion: mover todo el contenido de /usr/X11R6 a /usr/local

cd /usr/X11r6
find -d . -print | cpio -pvdam /usr/local

Entonces borrar X11r6 y crearlo como un enlace de sistema apuntando a /usr/local

rm -r /usr/X11R6 && ln -s /usr/local /usr/X11R6

luego de esto, por fin instalar la libreria sin mas inconveniente

cd /usr/ports/X11/x11-toolkit/libgdiplus && make install clean

1 comentario:

Víctor Garijo dijo...

voy a ver si funciona. Eres mi esperanza