miércoles, febrero 24, 2010

Anotaciones:Usar Dll en cygwin para windows

Por temas de trabajo, ahora estoy trabajando con el eclipse, para compilar C y c++ en windows, la verdad que tiene su miga, y se aprende mucho, con lo que anoto las cosas que me van saliendo.

Primero, parece que funciona mejor el compilador que viene con cygwin que el mingw, no se exactamente en que se diferencian, pero he tenido muchos problemas con librerías con el primero, además de que la instalación es mas sencilla (aunque baje mas cosas están todas en el mismo paquete)

Segundo, muy interesante el proceso para poder usar una librería dll, con gcc. Hay que pasarla a estática, es decir el pcomm.dll a libpcomm.a por ejemplo. Para ello después de dar muchas vueltas he encontrado lo siguiente en http://www.mygnet.net el siguiente artículo:
Hola a todos:

Intento convertir una libreria .dll echa en Visual C++ 6.0 a una libreria .a que pueda linkar con el compilador gcc en cygwin.

Lo he intentado de dos formas

1))Sacado de "www.cygwin.com/cygwin-ug-net/dll.html"
echo EXPORTS > foo.def
nm foo.dll | grep ' T _' | sed 's/.* T _//' >> foo.def

donde foo es el nombre de la libreria en cuestion
Aqui me sale el mensaje de error: "nm: foo.dll: no symbols" y según la página que lo he sacado eso es porque la dll "is stripped" (ni idea de que quiere decir esto). la siguiente instrucción sería:

dlltool --def foo.def --dllname foo.dll --output-lib foo.a

2))sacado de "www.mingw.org/MinGWiki/index.php/MSVC-MinGW-DLL"
"The right way is to produce the DEF file using the pexports tool included in the mingw-utils package and filter off the first underscore by sed:"

pexports testdll.dll | sed "s/^_//" > testdll.def

Then, when using dlltool to produce the import library, add `-U' to the command line:

dlltool -U -d testdll.def -l libtestdll.a

And now, you can proceed in the usual way:

gcc -o testmain testmain.c -L. -ltestdll

Pero en testmain.c me da error al no reconocer la función que exporto con la .dll.

Es posible que sea por los guiones bajos que añade Visual C antes de las funciones??

Alguien ha hecho algo parecido y me puede aconsejar??

Muchas gracias

Por supuesto, mi librería no sacaba los símbolos para la dlltool con el nm entonces continuamos con google, hasta que he encontrado el pexports y en esa web una buena guía de uso: