Page 1 of 2

Como puedo compilar una classe?

Posted: Mon May 06, 2013 10:17 pm
by Leo
Amigos del foro, quisiera recompilar fivewin.lib para xharbour versión 12.04, y la verdad, no sé como hacerlo, agradeceré toda ayuda.

Re: Como puedo compilar una classe?

Posted: Mon May 06, 2013 11:12 pm
by Antonio Linares

Re: Como puedo compilar una classe?

Posted: Tue May 07, 2013 9:47 pm
by Leo
Gracias Antonio, lamentablemente no me sirve de mucho, puesto que hice algunas modificaciones a la TXBrowse y este bat me compila todo, y aún así me deja fuera algunas funciones. Seguiré investigando.

Re: Como puedo compilar una classe?

Posted: Tue May 07, 2013 10:10 pm
by cnavarro
Leo wrote:Gracias Antonio, lamentablemente no me sirve de mucho, puesto que hice algunas modificaciones a la TXBrowse y este bat me compila todo, y aún así me deja fuera algunas funciones. Seguiré investigando.
Leo, quizas pueda servirte esto:

\borland\bcc582\bin\TLIB FIVEWIN.LIB -+ TXBROWSE.OBJ (tu modulo)

Re: Como puedo compilar una classe?

Posted: Tue May 07, 2013 10:27 pm
by Leo
Cristobal, gracias por responder, el tema es que tengo un bat que hace eso, el problema es que me deja algunas librerías fuera, y no sé como hacerlo.

Code: Select all

@ECHO OFF

IF EXIST FIVEHX.LOG DEL FIVEHX.LOG

ECHO Classes  -TXBrowse
G:\xharbour\bin\harbour.exe xBrowse /n/a/v/w /ic:\fwh\include;c:\xharbour\include >> FIVEHX.LOG
if errorlevel 1 GOTO ERROR
ECHO -O2 -Ic:\xharbour\include -tW xBrowse.C > b32.bc
G:\bcc582\bin\bcc32.exe -tWM -DHB_GUI -DHB_API_MACROS -DHB_STACK_MACROS -DHB_FM_STATISTICS_OFF -d -a8 -OS -O2 -5 -c @b32.bc >> FIVEHX.LOG
G:\bcc582\bin\tlib.exe FiveHX -+XBrowse >> FIVEHX.LOG
Rem DEL Brush.C >> FIVEHX.LOG
Rem DEL Brush.OBJ >> FIVEHX.LOG

goto end

:error
echo error de compilacion >> FIVEHX.LOG
notepad FIVEHX.LOG

:end

PAUSE
La lib resultante pesa 3 kb menos que el original y el resultado es el siguiente:

Code: Select all

Lines 1043, Functions/Procedures 33
Generating C source output to 'rmail.c'...
Done.
Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
rmail.c:
Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland
Error: Unresolved external '_HB_FUN_HB_HKEYAT' referenced from C:\FWH\LIB\FIVEHX
.LIB|XBrowse
Error: Unresolved external '_HB_FUN_HB_HVALUEAT' referenced from C:\FWH\LIB\FIVE
HX.LIB|XBrowse
Error: Unresolved external '_HB_FUN_HB_HCASEMATCH' referenced from C:\FWH\LIB\FI
VEHX.LIB|XBrowse
* Linking errors *

Re: Como puedo compilar una classe?

Posted: Wed May 08, 2013 1:59 am
by quique
Se me ocurre que copies los fuentes de fivewin a otra carpeta, y sobre esa copies los fuentes que modificaste, y ahí compiles como dice Antonio para compilar todo

Re: Como puedo compilar una classe?

Posted: Wed May 08, 2013 1:24 pm
by Leo
Quique, gracias por la idea, creo que mejoró, sólo que el método de compilación que me entregó Antonio me arrojó el siguiente error:

Code: Select all

Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
xbrowse.c:

G:\FWH\NewLibs>for %f in (*.obj) do g:\bcc582\bin\tlib fivehx.lib -+ %f /0 /P32,
,

G:\FWH\NewLibs>g:\bcc582\bin\tlib fivehx.lib -+ btnbmp.obj /0 /P32,,
TLIB 4.5 Copyright (c) 1987, 1998 Borland International


Warning: library was too large for page size, rebuilt with page size 64
Warning: results are safe in file 'libtmp0c.t90'
DOS-reported error: Permission denied
renaming 'fivehx.lib' to 'fivehx.BAK'

G:\FWH\NewLibs>g:\bcc582\bin\tlib fivehx.lib -+ xbrowse.obj /0 /P32,,
TLIB 4.5 Copyright (c) 1987, 1998 Borland International


Warning: library was too large for page size, rebuilt with page size 64
Warning: results are safe in file 'libtmp00.p00'
DOS-reported error: Permission denied
renaming 'fivehx.lib' to 'fivehx.BAK'

G:\FWH\NewLibs>
Cambié el parametro /p32 por /p64 y compiló, pero me sigue arrojando este error al compilar con la nueva lib:

Code: Select all

Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
azteccode.c:
Borland Resource Compiler  Version 5.40
Copyright (c) 1990, 1999 Inprise Corporation.  All rights reserved.
Turbo Incremental Link 5.69 Copyright (c) 1997-2005 Borland
Error: Unresolved external '_png_set_longjmp_fn' referenced from C:\FWH\LIB\FIVEHC.LIB|FWPNG
Error: Unresolved external '_HB_FUN_HB_HKEYAT' referenced from C:\FWH\LIB\FIVEHX.LIB|xbrowse
Error: Unresolved external '_HB_FUN_HB_HVALUEAT' referenced from C:\FWH\LIB\FIVEHX.LIB|xbrowse
Error: Unresolved external '_HB_FUN_HB_HCASEMATCH' referenced from C:\FWH\LIB\FIVEHX.LIB|xbrowse
* Linking errors *

Re: Como puedo compilar una classe?

Posted: Wed May 08, 2013 2:19 pm
by quique
Sin contar _png_set_longjmp_fn que NPI de donde sale esa función, las otras tres son funciones de harbour, así que el problema es que te falta enlazar las librerías correspondientes, no es problema de FW.

Re: Como puedo compilar una classe?

Posted: Wed May 08, 2013 2:37 pm
by Leo
Gracias Quique, el tema es ¿Cómo enlazo las librerías que me faltan?

Re: Como puedo compilar una classe?

Posted: Wed May 08, 2013 3:05 pm
by quique
Eso depende de que utilería utilices para compilar tu programa, tienes que agregarlas ahí.

Re: Como puedo compilar una classe?

Posted: Wed May 08, 2013 3:36 pm
by Leo
simplemente una bat xharbour, bcc582

Re: Como puedo compilar una classe?

Posted: Wed May 08, 2013 3:41 pm
by karinha

Re: Como puedo compilar una classe?

Posted: Wed May 08, 2013 3:46 pm
by quique
Entonces, revisa dentro del bat en que parte se agregan las librerías y ahi es donde tienes que agregar las que faltan

Re: Como puedo compilar una classe?

Posted: Wed May 08, 2013 4:51 pm
by Leo
Este es el bat:

Code: Select all

for %%f in (*.prg) do g:\xharbour\bin\harbour %%f /n /ig:\fwh\include;g:\xharbour\include
for %%f in (*.c) do g:\bcc582\bin\bcc32 -c -Ig:\bcc582\include;g:\xharbour\include %%f
for %%f in (*.obj) do g:\bcc582\bin\tlib fivehx.lib -+ %%f /0 /P64,,

Re: Como puedo compilar una classe?

Posted: Wed May 08, 2013 4:59 pm
by quique
Según entiendo, los Unresolved external se dan cuando compilas el ejecutable, pero en este caso se trata de una librería, pero tal vez Antonio o algún experto en el tema pueda dar otra respuesta