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: 8029
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 2 vezes
Curtiram: 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: 7135
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: 20416
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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: 20416
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

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, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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