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).