Página 1 de 1

MinGW - Como gerar LIB apartir de DLL?

Enviado: 03 Jul 2014 15:19
por janio
antigamente (ontem hehehe), qndo eu usavar xharbour + bcc, eu usava o comando IMPLIB do bcc para gerar uma lib a partir de uma dll.

E com o minGW, como faz pra gerar uma lib apartir de uma dll??

Janio

MinGW - Como gerar LIB apartir de DLL?

Enviado: 03 Jul 2014 16:01
por bencz

MinGW - Como gerar LIB apartir de DLL?

Enviado: 31 Mai 2017 22:35
por asimoes
Retornando ao tópico preciso de um exemplo

MinGW - Como gerar LIB apartir de DLL?

Enviado: 01 Jun 2017 08:50
por janio
Eu nao consegui e na época abandonei.

Tmb ainda tenho interesse no assunto

Janio

MinGW - Como gerar LIB apartir de DLL?

Enviado: 01 Jun 2017 12:03
por Itamar M. Lins Jr.
Ola!
O segredo está no fonte do hbmk2.prg

Código: Selecionar todos

STATIC FUNCTION win_implib_command_gcc( hbmk, cCommand, cSourceDLL, cTargetLib, cFlags )

   LOCAL nResult

   LOCAL cDef
   LOCAL cSourceDef
   LOCAL hFile
   LOCAL tmp

   LOCAL lDefSource
   LOCAL lNoDefSource := .F.

   SWITCH hb_FNameExt( cSourceDLL )
   CASE ".a"
      /* use these as-is, if specified */
      RETURN win_implib_copy( hbmk, cSourceDLL, cTargetLib )
   CASE ".def"
      /* ugly hack to make it configurable to force skip COFF .lib processing and
         skip to .def lookup, and if that fails, to .def generation */
      cSourceDLL := hb_FNameExtSet( cSourceDLL, ".dll" )
      lDefSource := .T.
      EXIT
   CASE ".nodef"
      cSourceDLL := hb_FNameExtSet( cSourceDLL, ".dll" )
      lNoDefSource := .T.
      /* fall through */
   OTHERWISE
      lDefSource := .F.
      IF ( nResult := win_implib_coff( hbmk, cSourceDLL, cTargetLib ) ) != _HBMK_IMPLIB_NOTFOUND
         RETURN nResult
      ENDIF
   ENDSWITCH

   IF ! lNoDefSource .AND. ;
      ( nResult := win_implib_def( hbmk, cCommand, cSourceDLL, cTargetLib, cFlags ) ) != _HBMK_IMPLIB_NOTFOUND
      RETURN nResult
   ENDIF

   IF lDefSource
      /* Try to generate a .def file from the .dll
         This might help in case the supplied .lib doesn't work. */
      IF win_defgen_command( hbmk, "gendef - {ID}", cSourceDLL, @cDef ) == _HBMK_IMPLIB_OK
         IF ( hFile := hb_vfTempFile( @cSourceDef,,, ".def" ) ) != NIL
            hb_vfWrite( hFile, cDef )
            hb_vfClose( hFile )
            IF ( nResult := win_implib_def( hbmk, cCommand, cSourceDef, cTargetLib, cFlags ) ) != _HBMK_IMPLIB_NOTFOUND
               hb_vfErase( cSourceDef )
               RETURN nResult
            ENDIF
            hb_vfErase( cSourceDef )
         ELSE
            _hbmk_OutErr( hbmk, I_( "Warning: Temporary .def could not be created." ) )
            RETURN nResult
         ENDIF
      ENDIF
   ELSEIF hb_vfExists( tmp := FN_CookLib( cSourceDLL, "lib", ".dll.a" ) )  /* use "lib<dllname>.dll.a" implibs, if there are any */
      cSourceDLL := tmp
   ENDIF

   RETURN win_implib_copy( hbmk, cSourceDLL, cTargetLib )

Para quem quiser decifrar, tem para BCC e MSVC também.

Saudações,
Itamar M. Lins Jr.

MinGW - Como gerar LIB apartir de DLL?

Enviado: 01 Jun 2017 15:33
por sygecom
Asimoes,
Você pode usar o BCC para gerar o .DEF e o MSVC para gerar a LIB e depois renomear apenas a extensão da mesma que são compatíveis com MINGW.

ex:
del version.lib
d:\devel\bcc55\bin\impdef.exe -a version.def version.dll
lib /MACHINE:X86 /def:version.def

MinGW - Como gerar LIB apartir de DLL?

Enviado: 01 Jun 2017 20:04
por JoséQuintas
hbmk2 -longhelp

Só olhar o help que tem lá

MinGW - Como gerar LIB apartir de DLL?

Enviado: 02 Jun 2017 09:50
por asimoes
hbmk2 -longhelp

Só olhar o help que tem lá
Ficou muito vago isso, lá tem trocentas mil informações, agora qual a que resolve o assunto do tópico ???

MinGW - Como gerar LIB apartir de DLL?

Enviado: 02 Jun 2017 10:02
por asimoes
Pronto

Resolvido:


hbmk2 -hbimplib libeay32.dll -oteste -hblib

Vai sair libteste.a

MinGW - Como gerar LIB apartir de DLL?

Enviado: 02 Jun 2017 13:11
por JoséQuintas
Só pra lembrar:
Isso não é converter LIB, isso é parecido com aquilo de criar chamadas pra RMChart.DLL.
A grande diferença é que isso vai OBRIGAR que a DLL exista.
Sem DLL, o EXE nem sequer funciona... a menos que tenham alterado isso.

Talvez as alterações do Harbour tenham sido feitas nesse sentido:
Não é que não precisa mais de DLL, apenas não obriga que ela esteja instalada, e só vai dar erro se tentar usar.
(Pras DLLs externas do Harbour - LibCurl, OpenSSL, MySql, etc).