Página 1 de 2
COMPILANDO COM O HARBOUR 3.2
Enviado: 26 Abr 2021 18:16
por reinaldo
Boa Tarde, amigos
Fui tentar fazer minha primeira compilação de um sistema completo.
O sistema compreende 1 programa principal e outros 32 programas.
A compilação acusou 2 tipos diferentes de erros. Em 2092 linhas.
Peço ajuda para soluciona-los.
1o. ERRO
.hbmk/win/mingw/telcli.o:TELCLI.c:(.text+0x0): multiple definition of `HB_FUN_TELCLI'
.hbmk/win/mingw/correia.o:correia.c:(.text+0x5480): first defined here
.hbmk/win/mingw/telcli.o:TELCLI.c:(.text+0x20): multiple definition of `HB_FUN_VMAIL'
.hbmk/win/mingw/correia.o:correia.c:(.text+0x54a0): first defined here
2o. ERRO
.hbmk/win/mingw/correia.o:correia.c:(.data+0x88): undefined reference to `HB_FUN_MOTDISPO'
.hbmk/win/mingw/correia.o:correia.c:(.data+0x318): undefined reference to `HB_FUN_MENUH'
.hbmk/win/mingw/correia.o:correia.c:(.data+0x5e8): undefined reference to `HB_FUN_VERCHK'
Os 2 erros ocorrem sempre que uma rotina chama outra rotina que está em outro PRG
Não sei se consegui explicar direito
Anexo o HBP
Obrigado
COMPILANDO COM O HARBOUR 3.2
Enviado: 26 Abr 2021 18:28
por Itamar M. Lins Jr.
Olá!
Veja que o módulo não tem FUNÇÃO: FUNCTION TELCLI
O nome do PRG é TELCLI.PRG, a mesma coisa para os demais.
Veja ai se não é isso. O PRG não tem a FUNÇÃO pq o nome da função é o próprio prg.
Saudações,
Itamar M. Lins Jr.
COMPILANDO COM O HARBOUR 3.2
Enviado: 26 Abr 2021 18:52
por reinaldo
Olá Itamar
Obrigado por responder
Coloquei FUNCTION TELCLI na 1a. linha do TELCLI.PRG e deu o mesmo erro
COMPILANDO COM O HARBOUR 3.2
Enviado: 26 Abr 2021 18:57
por Itamar M. Lins Jr.
Olá!
Mudou o nome do PRG ? telcli.prg para Clientes.prg por exemplo ?
Saudações,
Itamar M. Lins Jr.
COMPILANDO COM O HARBOUR 3.2
Enviado: 26 Abr 2021 19:08
por reinaldo
Mudei. Continua dando o erro
.hbmk/win/mingw/TCLI.o:TCLI.c:(.text+0x0): multiple definition of `HB_FUN_TELCLI'
.hbmk/win/mingw/correia.o:correia.c:(.text+0x53a0): first defined here
no TCLI.PRG a 1a. linha está assim:
FUNCTION TELCLI
A chamada no programa principal está assim:
telcli()
No HBP está assim:
-ocorreia
-inc
-compr=yes
-quiet
-lxhb
-lhbwin
-lhbct
-gui
-lhbblink
-lhbnf
correia
telac
telac2
telcli
COMPILANDO COM O HARBOUR 3.2
Enviado: 26 Abr 2021 19:31
por Itamar M. Lins Jr.
Olá!
O PRG CORREIA começa como ?
Tem que começar com FUNCTION MAIN ou PROCEDURE MAIN
Código: Selecionar todos
Function Main
TelCli() //Aqui vc chama a função que está em outro PRG... Linkado junto, entendeu ?
Saudações,
Itamar M. Lins Jr.
COMPILANDO COM O HARBOUR 3.2
Enviado: 26 Abr 2021 19:32
por Toledo
Reuinaldo, a função TEL_CLI() está em 2 arquivos PRG, está no arquivo TCLI.PRG e também no arquivo CORREIA.PRG, então verifique isto e altere o nome desta função em um dos PRG. O mesmo ocorre com a função VMAIL().
As funçôes MOTDISPO(), MENUH() e VERCHK() que são chamadas no arquivo CORREIA.PRG não existe em nenhum dos PRG deste seu sistema.
Abraços
COMPILANDO COM O HARBOUR 3.2
Enviado: 26 Abr 2021 19:39
por Itamar M. Lins Jr.
Olá!
está em 2 arquivos PRG, está no arquivo TCLI.PRG e também no arquivo CORREIA.PRG
Não é isso, falta a função MAIN.
O PRG CORREIA começa TelCLI() ai o sistema(harbour) diz que tem 2(duas)
Já expliquei para ele, corrigi ai meu post.
Saudações,
Itamar M. Lins Jr.
COMPILANDO COM O HARBOUR 3.2
Enviado: 27 Abr 2021 00:33
por JoséQuintas
Já se esqueceram do princípio básico?
Quando se compila um fonte, acabam sendo chamados automaticamente outros fontes, indicados em SET PROCEDURE.
Se colocar todos os fontes, vai acabar acusando duplicidade.
Pra compilar CADA PRG, isoladamente, e depois juntar no final, é usar -m
-m
compile module only
fonte a.prg------
set procedure to b
set procedure to c
Ao compilar o fonte a.prg, já serão incluídos os fontes b e c
Se colocar no HBP os 3 fontes, vai acusar duplicidade dos outros 2.
A não ser que compile usando -m
COMPILANDO COM O HARBOUR 3.2
Enviado: 27 Abr 2021 00:36
por JoséQuintas
Quanto à falta de funções, isso indica a falta de fontes.
No mesmo exemplo, se compilar o A.PRG com -m, e já linqueditar, vai dar falta dos módulos B e C.
Olhe como compila em Clipper, e faça igual no Harbour.
Se tem a lista de fontes, coloque a mesma lista de fontes.
Se não tem "lixo" na pasta, pode usar hbmk2 *.prg
COMPILANDO COM O HARBOUR 3.2
Enviado: 27 Abr 2021 10:13
por Itamar M. Lins Jr.
Olá!
A não ser que compile usando -m
Não falei disso para não confundir ainda mais. Tem que colocar MAIN, trocar o nome do PRG pois não foi foram criadas FUNCTION tal...
Forma antiga de programar, o nome do PRG é a função.
Não quis entrar nesses detalhes para não confundir.
Melhor ensinar a forma correta, hoje ninguém trata o nome do PRG como se fosse função.
Salvo engano. Como ele colocou os arquivos no HBP, não falei da possibilidade de SET PROCEDURE ...
Saudações,
Itamar M. Lins Jr.
COMPILANDO COM O HARBOUR 3.2
Enviado: 27 Abr 2021 12:18
por JoséQuintas
Itamar M. Lins Jr. escreveu:Salvo engano. Como ele colocou os arquivos no HBP, não falei da possibilidade de SET PROCEDURE ...
1o. ERRO
.hbmk/win/mingw/telcli.o:TELCLI.c:(.text+0x0): multiple definition of `HB_FUN_TELCLI'
.hbmk/win/mingw/correia.o:correia.c:(.text+0x5480): first defined here
.hbmk/win/mingw/telcli.o:TELCLI.c:(.text+0x20): multiple definition of `HB_FUN_VMAIL'
.hbmk/win/mingw/correia.o:correia.c:(.text+0x54a0): first defined here
TelCli() e o VMail(), elas estão em TELCLI.c e CORREIA.c
Sem o -m, correia.prg vai juntar telcli.prg e vmail.prg, gerando correia.c com todos juntos.
O -m já vai eliminar a possibilidade de que seja esse o problema, ou vai compilar sem erro, ou vai continuar acusando duplicidade.
Se for o que estou dizendo, ao alterar nome de função, vai acabar acusando duplicidade com outro nome.
Vai só dar trabalho, e pode complicar, se em outros lugares usar o nome original.
Melhor primeiro considerar que é a falta do -m, assim não tem mexida no fonte, e evita criar novos problemas.
Além do que..... se está acusando duplicidade, também acusaria no Clipper, e poderia significar lista de fontes errada.
Por essas e outras, melhor começar pelo -m, pra não mexer com fonte por enquanto.
COMPILANDO COM O HARBOUR 3.2
Enviado: 27 Abr 2021 12:22
por JoséQuintas
Importante:
talvez precise compilar usando -rebuild, porque não vai ter alteração no fonte, e no HBP tem -inc, que indica pra só compilar o que for mexido.
COMPILANDO COM O HARBOUR 3.2
Enviado: 27 Abr 2021 16:44
por reinaldo
Boa Tarde
Agradeço a boa vontade de todos tentando me ajudar.
Mas está difícil.
Talvez tenha sido muita pretensão minha querer iniciar no HB com sistema de transportes, com 32 prgs, 85.000 linhas de programação, que se interconectam entre si.
Procurar alguma literatura para iniciantes, e, usando o mesmo sistema, fazer uma função de cada vez.
Se eu pelo menos conseguisse entender esse erro:
.hbmk/win/mingw/pesq2.o:pesq2.c:(.text+0x20): multiple definition of `HB_FUN_TXCGCF'
.hbmk/win/mingw/correia.o:correia.c:(.text+0x4cc0): first defined here
quando TXCGCF é uma rotina de validação de CNPJ/CPF que realmente está no PESQ2.PRG mas não está no CORREIA.PRG.
o único link que liga tudo é que o CORREIA.PRG chama os PRGS PESQ2 e TELCLI e os 2 usam a rotina TXCGCF.
Entender isso é entender a lógica da estrutura da programação do HB.
COMPILANDO COM O HARBOUR 3.2
Enviado: 27 Abr 2021 17:35
por JoséQuintas
reinaldo escreveu:Se eu pelo menos conseguisse entender esse erro:
.hbmk/win/mingw/pesq2.o:pesq2.c:(.text+0x20): multiple definition of `HB_FUN_TXCGCF'
.hbmk/win/mingw/correia.o:correia.c:(.text+0x4cc0): first defined here
Você teve esse erro e outros.
Esse erro é porque encontrou funções repetidas:
- pode ser pela falta de -m na compilação
- pode ser pela falta de -n na compilação
- pode ser porque tem função repetida mesmo
O outro erro é o contrário: estão faltando funções.
Isso significa que tem mais fontes, ou, de repente, está usando uma LIB externa com essas funções.
A lógica do Harbour é extremamente simples, exatamente igual do Clipper:
Precisa compilar os fontes do aplicativo.
Tá faltando fonte na sua compilação, e pode conter fonte que não é usado.
O que tá faltando, tá acusando erro que falta, precisa adicionar
O que tá sobrando, tá acusando erro de duplicidade, o que talvez seja por causa dos parâmetros na compilação, testa acrescentando os parâmetros, ou remova o que está repetido.
Olhe a compilação do Clipper e coloque igual no Harbour, não queira fazer diferente que não dá.
Se no Clipper não acusa esses erros, é só fazer igual.