On Tue, 16 Feb 2010, Szak�ts Viktor wrote:
Hi,
> I'm trying to create -hbdyn pcode .dll, but since we've decided
> to disable Harbour libs in this case, I'm getting failure:
> ---
> undefined reference to `hb_vmExecute'
> undefined reference to `hb_vmProcessSymbols'
> undefined reference to `HB_FUN_QOUT'
> ---
And it's correct behavior. Such PCODE dll can be linked with:
1. harbour shared library (harbour*.dll) and in such case it's enough
to use -shared hbmk2 parameter.
2. hbmaindll library and in such case all external functions inside
PRG code should be declared as DYNAMIC to not create any hardcoded
references to them, i.e.:
/*** dllcode.prg ***/
DYNAMIC QOUT, PROCNAME
proc MY_PROC()
? PROCNAME() + ": hello !!!"
return
init proc start
? "INIT PROC", PROCNAME()
return
exit proc end
? "EXIT PROC", PROCNAME()
return
See my last message about creating DLLs and code to automatically
generate files with DYNAMIC declarations for all functions linked
with the main executable part of application.
I haven't added 'hbstatic' library yet we were talking about so
you have to link main part of application dynamically or build
harbour with HB_DYNLIB macro or add this code:
#pragma begindump
#include "hbapi.h"
HB_EXPORT_ATTR PHB_FUNC dll_hb_vmProcAddress( const char * szFuncName )
{
return hb_vmProcAddress( szFuncName );
}
to one of .prg files linked with main static part of application.
3. with import library created for the main executable part of application
when it was linked using -implib hbmk2 switch.
To create such import library you have to compile Harbour with
HB_DYNLIB macro or if you are using MinGW then you can use
--export-all-symbols LD switch, i.e.:
hbmk2 -implib -ldflag=-Wl,--export-all-symbols ...
You cannot link such PCODE DLL with Harbour static libraries.
Technically it's possible and you will not have any link time
errors when you add -nohblib- switch but you will create broken
binaries because your DLL and you static part of application will
use their own independent HVM implementations.
The only one situation when such DLL linked with Harbour static
libraries is usable is when programmer wants to create self contain
DLL which will be used by non Harbour applications.
> If I add -lhbmaindllp manually, I'm stil getting
> ---
> undefined reference to `HB_FUN_QOUT'
> ---
> What am I missing?
See above.
best regards,
Przemek
_______________________________________________
Harbour mailing list (attachment size limit: 40KB)
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour