Página 1 de 1

Compilar com libs

Enviado: 25 Mai 2009 08:30
por lapinhazzz
Caros Amigos,

Tenho uma dúvida e gostaria que me esclarecessem por favor

Tenho um programa chamado final.prg

final.prg tem o seguinte:

proc main()
prg1()
prg2()
exit

prg1.prg tem o seguinte:
proc prg1()
@ 12,12 say "programa 1"


prg2.prg tem o seguinte:
proc prg2()
@ 12,12 say "programa 2"

Os programas prg1.prg e prg2.prg foram adicionados à Lib 3.lib através do tlib.

Agora como faço para compilar o programa final.prg com a lib 3.lib ou se tiver mais libs como faço.

A compilação diz-me o seguinte:

Unresolved External.

Gostaria que me ajudassem

Obrigado

Carlos Lapa

Re: Compilar com libs

Enviado: 25 Mai 2009 10:06
por lapinhazzz
Caros Amigos,

Descobri como se compila com as libs

Colocar as libs na pasta xharbour\lib e quando compilar escolher as libs externas e escolher a lib feita pelo usuário

Obrigado.

Carlos Lapa

Re: Compilar com libs

Enviado: 25 Mai 2009 11:41
por sygecom
Bom, para quem não sabe aqui vai umas dicas:

Para gerar(compilar) uma LIB usando xHarbour pode se usar o hbmake com a seguinte linha de comando de dentro da pasta onde se encontra os .PRG que vai fazer parte da LIB:
hbmake nomelib.bc /elx
Esse comando vai abrir o hbmake , basta ir passando pelos parametros até chegar na lista dos arquivos .PRG e marcar com a barra de espaço os .PRG que fazem parte da LIB.

Com o Harbour já é mais facil ainda usando o hbmk2, e diga de passagem esta muito mais facil de compilar até mesmo sistemas. Até acho que o pessoal do xHarbour deveriam analisar a possibilidade de usar o hbmk2.exe no xharbour ao invés do hbmake.exe.
Bom, pela linha de dentro da pasta onde se encontra os .PRG basta chamar:
hbmk2 -trace -hblib -onomelib *.prg

Mais facil que isso só dois disso.

Depois para linkar as LIB geradas no projeto, é a mesma coisa, com o xHarbour se usa o hbmake porem apenas com o comando /EL e com o Harbour usando o hbmk2 *.prg, e se quiser adicionar umas LIB ao projeto compilado com harbour, basta colocar um arquivo com a extenção .HBP dentro da pasta que o hbmk2 le automaticamente o mesmo abaixo um exemplo do que estou usando com o Harbour

arquivo.hbp

Código: Selecionar todos

{win}libs=hwgui procmisc hbmzip hbziparc hbct hbtip hbwin xhb hbhpdf libhpdf libpng hbblat blat
{win}gt=gtgui
{linux}libs=hwgui procmisc hbmzip hbziparc hbtip hbhpdf libhpdf libpng
run=yes

Re: Compilar com libs

Enviado: 26 Mai 2009 12:58
por lapinhazzz
Caro Amigo e a todos deste forum.

Estive a compilar como você disse:

hbmake nomedalib.bc /elx
e depois o compilador diz o seguinte:

Warning 'prog1' not found in library
Warning 'prog2' not found in library

Avisa que os dois prgs não se encontram dentro da pasta das bibliotecas.
Coloquei a pasta no path e mesmo assim não funcionou.

Então e agora como faço?

Cumprimentos,

Carlos Lapa

Re: Compilar com libs

Enviado: 26 Mai 2009 13:17
por sygecom
Olá Carlos,
Você marcou todos os .PRG que fazem parte da sua LIB ?

Post aqui por favor seu arquivo (nomedalib.bc) !

Se você esta tentando gerar uma LIB com o exemplo que postou acima, apenas link seu prg1.prg e prg2.prg, não prescisa de um terceiro arquivo com MAIN.

Código: Selecionar todos

//proc main()
//prg1()
//prg2()
//exit

//prg1.prg tem o seguinte:
proc prg1()
@ 12,12 say "programa 1"

//prg2.prg tem o seguinte:
proc prg2()
@ 12,12 say "programa 2"

Nota: MAIN é apenas para compilar seus aplicativos

Re: Compilar com libs

Enviado: 27 Mai 2009 05:06
por lapinhazzz
Eu tenho um prg principal que se chama final. Tenho mais dois chamados prg1 e prg2
No final.prg tenho:

proc main()
prg1()
prg2()


no prg1 tenho:

proc prg1()
@ 2,2 say "primeiro prg"

no prg2 tenho:
@ 3,3 say "segundo prg"

Agora vou compilar dentro da pasta que contém os prgs e faço
hbmake final.bc /elx
E dá-me o erro que eu postei atrás

Agora não sei como fazer!

Muito obrigado pela atenção.

Carlos Lapa

Re: Compilar com libs

Enviado: 15 Jun 2009 15:35
por sygecom
Faça como eu disse no topico anterior que vai dar certinho ! o que você postou no ultimo post não foram erros e sim avisos apenas.