MinGW - Como gerar LIB apartir de DLL?

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

MinGW - Como gerar LIB apartir de DLL?

Mensagem 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
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MinGW - Como gerar LIB apartir de DLL?

Mensagem por asimoes »

Retornando ao tópico preciso de um exemplo
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
janio
Colaborador
Colaborador
Mensagens: 1846
Registrado em: 06 Jul 2004 07:43
Localização: UBAJARA - CE

MinGW - Como gerar LIB apartir de DLL?

Mensagem por janio »

Eu nao consegui e na época abandonei.

Tmb ainda tenho interesse no assunto

Janio
fui...
e-mail:janioaguiar@yahoo.com.br
msn: janio_aguiar@hotmail.com
xHarbour1.2.1/Harbour3.2 + wvg + hwgui + Mediator + MySql
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

MinGW - Como gerar LIB apartir de DLL?

Mensagem 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.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

MinGW - Como gerar LIB apartir de DLL?

Mensagem 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
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MinGW - Como gerar LIB apartir de DLL?

Mensagem por JoséQuintas »

hbmk2 -longhelp

Só olhar o help que tem lá
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MinGW - Como gerar LIB apartir de DLL?

Mensagem 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 ???
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

MinGW - Como gerar LIB apartir de DLL?

Mensagem por asimoes »

Pronto

Resolvido:


hbmk2 -hbimplib libeay32.dll -oteste -hblib

Vai sair libteste.a
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

MinGW - Como gerar LIB apartir de DLL?

Mensagem 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).
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder