Linkar DLLs con MinGW

Octubre 26th, 2005

Cuando tengo que programar bajo Windows suelo hacerlo en C++ con el compilador MinGW, básicamente porque estoy acostumbrado a hacerlo con gcc en Linux y me siento más cómodo con él que con Visual Studio, además del elevado precio de este.

Esto es un problema cuando necesitamos utilizar librerías externas que no han sido diseñadas para funcionar con MinGW. En este caso me he encontrado al ir a realizar una aplicación que utiliza el SDK de Canon.

Dicho SDK incluye el fichero CDSDK.LIB con el que hay linkar para poder llamar a las funciones que ofrece la DLL correspondiente. Este fichero está pensado para ser utilizado en Visual Studio, por lo que no funciona con MinGW. Por suerte hay una manera de convertirlo, veamosla en sencillos pasos:

  • Exportar las funciones a un fichero DEF con la ayuda de pexports: pexports cdsdk.dll > cdsdk.def
  • Ver todas las funciones que necesitamos importar y que no funcionan. Esta lista nos la da MinGW a la hora de linkar y veremos que las funciones acaban en @nn, donde nn es un número.
  • Modificar el fichero DEF añadiendo los @nn donde sea necesario
  • Convertir la DLL con dlltool (que creo que viene incluido en MinGW): dlltool —input-def cdsdk.def —dllname cdsdk.dll —output-lib libcdsdk.a
  • Copiamos libcdsdk.a a c:mingwlib
  • Ya podemos linkar nuestro programa con la libreria: gcc -lcdsdk main.cpp -o programa

Esto servirá también para otras librerías que queramos usar desde MinGW.

Guardado en Artículo, Programación | Comentarios desactivados en Linkar DLLs con MinGW

Los comentarios están cerrados.