Page 1 of 3

Compilar Harbour modo Consola 64bits

PostPosted: Fri May 24, 2024 7:34 pm
by jrestojeda
Hola buenas tardes a todos...

Quería probar de generar un ejecutable de 64 bits como para hacer pruebas. Quisiera comenzar con algo sencillo para ver primero si se puede...

Code: Select all  Expand view
Function main()

ALERT("Hola mundo")

Return nil


Tengo un sistema muy viejo que me gustaría intentar migrarlo a 64 bits con harbour.
Como punto de partida quisiera saber si alguien sabe como compilar en 64bits algo simple como el "Hola Mundo" como para comenzar.
Desde ya muchas gracias.
Saludos,

Re: Compilar Harbour modo Consola 64bits

PostPosted: Sat May 25, 2024 4:46 am
by Antonio Linares
Estimado Esteban,

go64.bat
Code: Select all  Expand view
@setlocal
call "%ProgramFiles%\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
c:\harbour\bin\win\msvc64\hbmk2 hola.prg -comp=msvc64 -lucrt -ldflag=/NODEFAULTLIB:libucrt -ldflag=/NODEFAULTLIB:msvcrt
@endlocal
hola.exe

hola.prg
Code: Select all  Expand view
function Main()

   Alert( "Hola Mundo" )

return nil

Usa este Harbour 64 bits para Visual Studio Community 2022:
https://github.com/FiveTechSoft/harbour_and_xharbour_builds/blob/master/harbour_msvc2022_64_20240417.zip

Y descarga Visual Studio Community 2022 desde aqui: https://visualstudio.microsoft.com/es/vs/community/

Re: Compilar Harbour modo Consola 64bits

PostPosted: Wed May 29, 2024 1:00 pm
by jrestojeda
Estimado Antonio.
Muchas gracias por su respuesta.
Yo ya tenía instalado el Visual Studio 2019, para ganar tiempo probé compilar con ese 2019 y me funcionó perfecto.
Usted recomienda 2022 en su respuesta, es por algo en particular o solo porque es una versión más actual?
Consulto ya que como comenté antes, el 2019 ya lo tenía instalado y probé con ese y me funcionó.
Saludos,

Re: Compilar Harbour modo Consola 64bits

PostPosted: Wed May 29, 2024 2:16 pm
by jrestojeda
Antonio,
Agrego otra consulta.
Al proyecto le agregué hbmysql.lib que viene el el harbour que me pasó para bajar.
Pero me falta libmysql.lib, esa de donde la obtengo o como la genero?
Podría orientarme un poco?
Desde ya muchas gracias.
Saludos,

Re: Compilar Harbour modo Consola 64bits

PostPosted: Thu May 30, 2024 4:14 am
by Antonio Linares
Esteban,

Estamos organizando para incluirla también en el fichero de distribución de Harbour/xHarbour

Te aviso en cuanto esté listo

Re: Compilar Harbour modo Consola 64bits

PostPosted: Thu May 30, 2024 9:09 am
by Antonio Linares

Re: Compilar Harbour modo Consola 64bits

PostPosted: Thu May 30, 2024 12:35 pm
by Enrico Maria Giordano
Please try it and report back, thank you.

Re: Compilar Harbour modo Consola 64bits

PostPosted: Thu May 30, 2024 2:02 pm
by jrestojeda
Muchas gracias por la respuesta,
Al compilar me arroja lo siguiente:

Code: Select all  Expand view

C:\DEMO>C1

C:\DEMO>call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.7.0
** Copyright (c) 2020 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
hbmk2[DEMO64]: Warning: Non-portable parameter: 'LIB\hbmysql.lib' in
               DEMO64.HBP:4. Use '-LLIB -lhbmysql' option(s) instead.
hbmk2[DEMO64]: Warning: Non-portable parameter: 'LIB\libmysql.lib' in
               DEMO64.HBP:5. Use '-LLIB -llibmysql' option(s) instead.
Harbour 3.2.0dev (r2404101339)
Copyright (c) 1999-2021, https://harbour.github.io/
Compiling 'DEMO64.PRG'...
Lines 599, Functions/Procedures 1
Generating C source output to 'C:\Users\Esteban\AppData\Local\Temp\hbmk_as8fou.dir\DEMO64.c'... Done.
Compiling 'MYSQL.prg'...
Lines 41, Functions/Procedures 2
Generating C source output to 'C:\Users\Esteban\AppData\Local\Temp\hbmk_as8fou.dir\MYSQL.c'... Done.
DEMO64.c
MYSQL.c
Generando código...
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_num_rows sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_LIST_DBS
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_num_fields sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_FETCH_ROW
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_affected_rows sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_AFFECTED_ROWS
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_errno sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_ERRNO
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_error sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_ERROR
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_init sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_REAL_CONNECT
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_real_connect sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_REAL_CONNECT
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_select_db sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_SELECT_DB
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_store_result sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_STORE_RESULT
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_use_result sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_USE_RESULT
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_get_server_version sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_GET_SERVER_VERSION
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_free_result sin resolver al que se hace referencia en la funci¢n MYSQL_RES_release
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_fetch_row sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_FETCH_ROW
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_fetch_lengths sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_FETCH_ROW
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_real_escape_string sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_REAL_ESCAPE_STRING
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_close sin resolver al que se hace referencia en la funci¢n MYSQL_release
DEMO64.exe : fatal error LNK1120: 16 externos sin resolver
hbmk2[DEMO64]: Error: Running linker. 1120
link.exe @C:\Users\Esteban\AppData\Local\Temp\8bbhvu.lnk

hbmk2: Hint: Add option 'hbmysql.hbc' for missing function(s):
       mysql_real_escape_string(), mysql_get_server_version(),
       mysql_use_result(), mysql_store_result(), mysql_select_db(),
       mysql_real_connect(), mysql_error(), mysql_errno(),
       mysql_affected_rows(), mysql_fetch_row(), mysql_list_dbs()
Presione una tecla para continuar . . .
C:\DEMO>


Entiendo que me está faltando algo...
Alguna sugerencia?

Desde ya muchas gracias.
Saludos,

Re: Compilar Harbour modo Consola 64bits

PostPosted: Thu May 30, 2024 3:00 pm
by Enrico Maria Giordano
jrestojeda wrote:
Code: Select all  Expand view
Harbour 3.2.0dev (r2404101339)


First thing to note. You are not using the latest Harbour build:

Code: Select all  Expand view
Harbour 3.2.0dev (r2405130039)


Second, try to link these libs:

Code: Select all  Expand view
hbmysql.lib
sddmy.lib


Let me know.

Re: Compilar Harbour modo Consola 64bits

PostPosted: Thu May 30, 2024 6:55 pm
by jrestojeda
Muchas gracias por la respuesta.

Paso a comentar:

Este es mi archivo DEMO64.hbp
Code: Select all  Expand view
DEMO64.PRG
MYSQL.prg

LIB\hbmysql.lib
LIB\sddmy.lib
LIB\libmysql.lib


Tengo un directorio con las 3 libs que se quieren enlazar en el proyecto.

Compilo de la siguiente manera:
Code: Select all  Expand view
@setlocal
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
c:\harbour64\bin\hbmk2 DEMO64.HBP -comp=msvc64 -lucrt -ldflag=/NODEFAULTLIB:libucrt -ldflag=/NODEFAULTLIB:msvcrt

@endlocal
pause


Tengo el harbour bajado y ubicado en C:\HARBOUR64

El resultado de compilar es el siguiente:
Code: Select all  Expand view
C:\DEMO>c1

C:\DEMO>call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" amd64
**********************************************************************
** Visual Studio 2019 Developer Command Prompt v16.7.0
** Copyright (c) 2020 Microsoft Corporation
**********************************************************************
[vcvarsall.bat] Environment initialized for: 'x64'
hbmk2[DEMO64]: Warning: Non-portable parameter: 'LIB\hbmysql.lib' in
               DEMO64.HBP:4. Use '-LLIB -lhbmysql' option(s) instead.
hbmk2[DEMO64]: Warning: Non-portable parameter: 'LIB\sddmy.lib' in
               DEMO64.HBP:5. Use '-LLIB -lsddmy' option(s) instead.
hbmk2[DEMO64]: Warning: Non-portable parameter: 'LIB\libmysql.lib' in
               DEMO64.HBP:6. Use '-LLIB -llibmysql' option(s) instead.
Harbour 3.2.0dev (r2405130039)
Copyright (c) 1999-2021, https://harbour.github.io/
Compiling 'DEMO64.PRG'...
Lines 599, Functions/Procedures 1
Generating C source output to 'C:\Users\Esteban\AppData\Local\Temp\hbmk_xjz47h.dir\DEMO64.c'... Done.
Compiling 'MYSQL.prg'...
Lines 153, Functions/Procedures 2
Generating C source output to 'C:\Users\Esteban\AppData\Local\Temp\hbmk_xjz47h.dir\MYSQL.c'... Done.
DEMO64.c
MYSQL.c
Generando código...
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_num_rows sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_LIST_DBS
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_num_fields sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_FETCH_ROW
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_affected_rows sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_AFFECTED_ROWS
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_errno sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_ERRNO
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_error sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_ERROR
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_init sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_REAL_CONNECT
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_real_connect sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_REAL_CONNECT
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_select_db sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_SELECT_DB
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_store_result sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_STORE_RESULT
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_use_result sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_USE_RESULT
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_get_server_version sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_GET_SERVER_VERSION
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_free_result sin resolver al que se hace referencia en la funci¢n MYSQL_RES_release
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_fetch_row sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_FETCH_ROW
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_fetch_lengths sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_FETCH_ROW
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_real_escape_string sin resolver al que se hace referencia en la funci¢n HB_FUN_MYSQL_REAL_ESCAPE_STRING
hbmysql.lib(mysql.obj) : error LNK2019: s¡mbolo externo server_mysql_close sin resolver al que se hace referencia en la funci¢n MYSQL_release
DEMO64.exe : fatal error LNK1120: 16 externos sin resolver
hbmk2[DEMO64]: Error: Running linker. 1120
link.exe @C:\Users\Esteban\AppData\Local\Temp\fbv1ci.lnk

hbmk2: Hint: Add option 'hbmysql.hbc' for missing function(s):
       mysql_real_escape_string(), mysql_get_server_version(),
       mysql_use_result(), mysql_store_result(), mysql_select_db(),
       mysql_real_connect(), mysql_error(), mysql_errno(),
       mysql_affected_rows(), mysql_fetch_row(), mysql_list_dbs()
Presione una tecla para continuar . . .
C:\DEMO>


Quedo atento a alguna otra sugerencia.
Saludos,

Re: Compilar Harbour modo Consola 64bits

PostPosted: Thu May 30, 2024 7:16 pm
by Enrico Maria Giordano
You should not use hbmk2.exe, it is a very bad and bugged tool. Please try with a simple batch. I cannot help you with hbmk2.exe.

Re: Compilar Harbour modo Consola 64bits

PostPosted: Fri May 31, 2024 9:04 am
by Enrico Maria Giordano
Anyway, It looks as you are not linking all the required libraries. Please check and let me know.

Re: Compilar Harbour modo Consola 64bits

PostPosted: Fri May 31, 2024 1:06 pm
by Antonio Linares
Esteban,

Tienes que enlazar fwh64\lib\libmariadb64.lib

Re: Compilar Harbour modo Consola 64bits

PostPosted: Fri May 31, 2024 1:15 pm
by Enrico Maria Giordano
What does it have to do with MySQL and Harbour? If that is the solution ok, I could not imagine it.

Re: Compilar Harbour modo Consola 64bits

PostPosted: Fri May 31, 2024 3:27 pm
by jrestojeda
Hola,

Estoy agregando las 3 libs que tomé del ultimo Harbour descargado:

Code: Select all  Expand view
hbmysql.lib
sddmy.lib
libmysql.lib


No logro entender que me estaría faltando para que me compile correctamente.

Saludos,