Harbour atualização 13/02/2024

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

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour atualização 13/02/2024

Mensagem por JoséQuintas »

Vamos por partes:

-xhb é modo compatibilidade xharbour, mas na prática faz mais que isso.
É recomendado não usar, mas não impede de compilar, e é até comuns algumas LIBs acrescentarem SEMPRE.

Agora vamos ao harbour: (acho que também vale pra xharbour)

Aqui deixo fontes DO HARBOUR em D:\GITHUB\HARBOUR32
Gero o harbour para D:\HARBOUR

Você pode ter porrilhões de compiladores C no PATH, então acostume a deixar definido:

SET HB_INSTALL_PREFIX=c:\harbour
SET HB_COMPILER=mingw

Definido como mingw, vai gerar o harbour com mingw, e vai gerar as libs em harbour\lib\win\mingw

Definido como mingw, vai compilar com mingw, e buscar as libs em harbour\lib\win\mingw

Se bagunçar o compilador, ou se tiver no PATH outro compilador, E NÃO TIVER UM DEFAULT DEFINIDO, será usado o primeiro que aparecer.

De repente, gerou pra mingw e está tentando compilar com bcc... aí não vai encontrar as LIBs.
Com path errado, ou sem compilador definido, isso poderia acontecer.

Não deveria fazer diferença pra compilação, mas faz, HB_INSTALL_PREFIX

Também faz diferença o -xhb

HBMK2 tem o harbour embutido dentro dele, ele não precisa do harbour.exe
se usada a opção -xhb, será usado um harbour.exe externo, o que for encontrado no PATH

Esse também é o truque pra usar hbmk2 com harbour ou xharbour, o -xhb (e o HB_INSTALL_PREFIX)

Agora é conferir essas coisas básicas: HB_INSTALL_PREFIX, HB_COMPILER, e o PATH acaba sendo mais flexível, podendo ter mais paths do que deveria.

Código: Selecionar todos

d:\harbour\lib\win>dir
 O volume na unidade D é TRABALHO
 O Número de Série do Volume é C4CC-0221

 Pasta de d:\harbour\lib\win

06/12/2023  05:05    <DIR>          .
06/12/2023  05:05    <DIR>          ..
06/12/2023  05:15    <DIR>          mingw
               0 arquivo(s)              0 bytes
Isso acima indica que meu harbour foi gerado com mingw 32 bits, e só posso compilar com mingw 32 bits.
Qualquer outro compilador vai acusar falta de lib.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour atualização 13/02/2024

Mensagem por JoséQuintas »

Informação adicional:

Código: Selecionar todos

d:\fontes\integra>hbmk2 jpa
hbmk2: Processing environment options: -comp=mingw
hbmk2: Processing configuration: d:\harbour\bin\hbmk.hbc
Harbour 3.2.0dev (r2402101027)
Copyright (c) 1999-2021, https://harbour.github.io/
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2023
UPX 4.1.0       Markus Oberhumer, Laszlo Molnar & John Reiser    Aug 8th 2023

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
   6889472 ->   1901568   27.60%    win32/pe     jpa.exe

Packed 1 file.
Repare nestas duas linhas

Código: Selecionar todos

hbmk2: Processing environment options: -comp=mingw
hbmk2: Processing configuration: d:\harbour\bin\hbmk.hbc
Isso indica que tem duas coisas modificando o comportamento que seria normal
o primeiro deve ser o HB_COMPILER, ou talvez eu acrescente sempre, sei lá.
o segundo é um HBMK.HBC que criei em harbour\bin, pra configuração fixa de algumas coisas
Às vezes a solução do problema pode estar avisada nesse início.
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/
marco.prodata
Usuário Nível 3
Usuário Nível 3
Mensagens: 238
Registrado em: 30 Nov 2018 10:07
Localização: Caratinga

Harbour atualização 13/02/2024

Mensagem por marco.prodata »

JoséQuintas escreveu:Vamos por partes:

-xhb é modo compatibilidade xharbour, mas na prática faz mais que isso.
É recomendado não usar, mas não impede de compilar, e é até comuns algumas LIBs acrescentarem SEMPRE.

Sim mas repara no comando hbmk2 <nomedoprojeto> -xhb -traceonly que o nome das libs no comando de compilação muda, é isso que tá causando o problema na compilação.
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 166
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

Harbour atualização 13/02/2024

Mensagem por ivanil »

Recentemente, eu tive um caso de um usuário que enfrentou problemas similares aos seus. O IDE não estava reconhecendo os caminhos corretos, mesmo que eles estivessem definidos no script. Depois de muita pesquisa, eu descobri que ele tinha algumas variáveis de ambiente configuradas no próprio Windows, inclusive fora o Quintas que o auxiliou nisso.

Lição aprendida: as variáveis de ambiente têm prioridade, mesmo que você especifique um caminho alternativo. Então, no script, eu passei a limpar essas variáveis. Isso porque, no meu caso, o IDE pode rodar em máquinas que têm diferentes instalações que não são compatíveis entre si. Assim, o script cria o ambiente virtual próprio sem alterar a configuração padrão do Windows.

Teste o exemplo abaixo, tomando o cuidado para apontar um caminho Harbour que tenha sido criado pelo mesmo compilador que você cogita usar. Ou seja, para usar o Borland, o Harbour tem que ter sido criado pelo Borland. Se pretende usar o MinGW, o Harbour tem que ter sido criado com o MinGW.

Ajustando esses dois caminhos, o resto o hbmk2 faz sozinho.

Código: Selecionar todos

@echo off

Rem Variaveis de ambiente que precedem a linha de comando bhmk2
@Set HB_BUILD_CONTRIB_DYN=
@Set HB_BUILD_DYN=
@Set HB_BUILD_SHARED=
@Set HB_BUILD_STRIP=
@Set HB_COMPILER=
@Set HB_INSTALL_PREFIX=

@Set HB_ARCHITECTURE=w32
rem @Set HB_COMPILER=mingw


REM Path do Harbour
@Set HMGRHARBOUR=(SEU CAMINHO HARBOUR)

REM Path do Compilador
@Set HMGRCOMP=(SEU CAMINHO BORLAND/MINGW)

REM Deixando os Binarios disponiveis
@Set PATH=%HMGRHARBOUR%\bin;%HMGRCOMP%\bin

Echo Aguarde... Compilando o projeto...

HBMK2 %1% 

PAUSE
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Harbour atualização 13/02/2024

Mensagem por JoséQuintas »

marco.prodata escreveu:Sim mas repara no comando hbmk2 <nomedoprojeto> -xhb -traceonly que o nome das libs no comando de compilação muda, é isso que tá causando o problema na compilação.
Pensando bem.... se o nome da lib é esse, indicar a lib seria -lxhb, com o "ELE" minúsculo, ou o xhb.hbc.
Deve ser pra usar hbmk2 no xharbour mesmo, e entram as LIBs do xharbour.
-hb10 enable Harbour 1.0.x compatibility mode
-hb20 enable Harbour 2.0.x compatibility mode
-hb30 enable Harbour 3.0.x compatibility mode
-xhb enable xHarbour mode
-hbc enable pure C mode
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
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Harbour atualização 13/02/2024

Mensagem por sygecom »

marco.prodata escreveu:Aparentemente tem um bug nessa opção -xhb, olha a diferença dos comandos utilizados quando usa o -xhb e quando não usa:

Código: Selecionar todos

E:\PROJXHARB\harbour>hbmk2 teste -xhb -traceonly
hbmk2: Linha de comando do Harbour:
e:\harbour\bin\harbour.exe -n teste.prg -oC:\Users\marco\AppData\Local\Temp\hbmk_fogsui.dir\ -ie:\harbour\include
hbmk2: Comando do compilador C/C++:
gcc.exe -c -O3 -D__USE_MINGW_ANSI_STDIO=0  -W -Wall -pipe -Ie:/harbour/include C:/Users/marco/AppData/Local/Temp/hbmk_fogsui.dir/teste.c
hbmk2: Comando do Linkeditor:
gcc.exe C:/Users/marco/AppData/Local/Temp/hbmk_fogsui.dir/teste.o    -mconsole -Wl,--start-group -ldebug -lvm -lrtl -llang -lcodepage -lgtcgi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lrdd -lusrrdd -ldbfntx -ldbfcdx -ldbfnsx -ldbffpt -lrdd -lhsx -lhbsix -lmacro -lpp -lcommon -lwinmm -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -liphlpapi -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lmapi32 -limm32 -lmsimg32 -lwininet   -Wl,--end-group -oteste.exe  -Le:/harbour/lib/win/mingw64

E:\PROJXHARB\harbour>hbmk2 teste -traceonly
hbmk2: Harbour compiler command (built-in):
(e:\harbour\bin\harbour.exe) -n2 teste.prg -oC:\Users\marco\AppData\Local\Temp\hbmk_7febst.dir\ -ie:\harbour\include
hbmk2: Comando do compilador C/C++:
gcc.exe -c -O3 -D__USE_MINGW_ANSI_STDIO=0  -W -Wall -pipe -Ie:/harbour/include C:/Users/marco/AppData/Local/Temp/hbmk_7febst.dir/teste.c
hbmk2: Comando do Linkeditor:
gcc.exe C:/Users/marco/AppData/Local/Temp/hbmk_7febst.dir/teste.o    -mconsole -Wl,--start-group -lhbextern -lhbdebug -lhbvm -lhbrtl -lhblang -lhbcpage -lgtcgi -lgtpca -lgtstd -lgtwin -lgtwvt -lgtgui -lhbrdd -lhbuddall -lhbusrrdd -lrddntx -lrddcdx -lrddnsx -lrddfpt -lhbrdd -lhbhsx -lhbsix -lhbmacro -lhbcplr -lhbpp -lhbcommon -lhbmainstd -lwinmm -lkernel32 -luser32 -lgdi32 -ladvapi32 -lws2_32 -liphlpapi -lwinspool -lcomctl32 -lcomdlg32 -lshell32 -luuid -lole32 -loleaut32 -lmpr -lmapi32 -limm32 -lmsimg32 -lwininet -lhbpcre -lhbzlib   -Wl,--end-group -oteste.exe  -Le:/harbour/lib/win/mingw64

pode ser que seja necessário na compilação do harbour compilar com algum parametro diferente para que as bibliotecas não tem o "hb" na frente do nome do arquivo.
Eu que tinha entendido errado e, estava usando esse comando por isso que não achava as lib.
-xhb na linha de comando é para usar o HBMK2 pra compilar projetos com xHarbour.

Pra ter a compatibilidade com xHarbour, ai é como você disse, usando xhb.hbc

Isso consegui superar além de outras centenas de problemas que esta aparecendo, a jornada é longa ainda.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Responder