C/Visual C - pasar librerias de .dll a .a

 
Vista:

pasar librerias de .dll a .a

Publicado por Soforo (5 intervenciones) el 07/05/2007 17:42:52
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 "http://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 "http://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. le pone un guion bajo delante.

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
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:pasar librerias de .dll a .a

Publicado por Tom (619 intervenciones) el 07/05/2007 21:37:11
Pues, una librería "stripped" es, precisamente, la que no contiene la tabla de símbolos de sus objs (un ejecutable también puede estar "stripped").

Me parece un asunto lioso, lo mejor sería que recompilaras la librería con los fuentes originales. De todos modos, si el problema está en el guión, prueba a no hacer el sed de la salida de pexports.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:pasar librerias de .dll a .a

Publicado por Soforo (5 intervenciones) el 08/05/2007 11:35:46
Gracias por contestar.

La cosa es que no tengo el codigo fuente, tengo la libreria ya compilada, de ahi el asunto de convertirla para poder lincarla al resto de mi programa que me funciona con el gcc.

De todas maneras he encontrado otra forma de hacerlo:

1Create a definition file using reimp.
2For each stdcall function (formatted as _name@ordinal) add a line name = _name@ordinal, allowing MinGW to map its stdcall naming convention to that of MSVC.
3Use dlltool to convert the MSVC library into a MinGW library with the new definition.

Supongo que lo del paso 2 es lo de corregir la tabla de objs que indicas mas arriba (gracias por la aclaracion).

Compila PEROOOO: no se ejecuta correctamente.

En ello estoy, cualquier idea es agradecida.

Hasta luego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar