Hi,

The main problem with the MinGW Qt 4.6 is that the GCC 4.4.0 has a new
exception model Dwarf, as it is described below (from release note):

- Zero cost exceptions: New exception model Dwarf only has performance
  penalty when being thrown.  The old model, SJLJ, is no longer
  available.

The recommended tdm-mingw-1.908.0-4.4.1-2.exe supports, by default, just the
SJLJ unwinding, unfortunately.
We should switch to Dwarf-2 Unwinding, to have the possibility to build a
correct 'hbide' with the new Qt 4.6 MinGW variant.

See below the README of the TDM - GCC 4.4.1 DWARF-2 components:

----------------------------------------------------------------------------

*** Dwarf-2 vs. SJLJ unwinding ***

GCC supports two methods of stack frame unwinding: Dwarf-2 (DW2) or SJLJ
(setjmp/longjmp). Until recently, only SJLJ has been available for the
Windows
platform. This affects you, the end user, primarily in programs that throw
and
catch exceptions. Programs which utilize the DW2 unwind method handle
exceptions
much more quickly than programs which utilize the SJLJ method. However, the
DW2
method increases code size by a noticeable amount, and additionally cannot
yet
unwind (pass exceptions) through "foreign" stack frames: stack frames
compiled
by another non-DW2-enabled compiler, such as OS DLLs in a Windows callback.

This means that you should in general choose the SJLJ version of the TDM-GCC
builds unless you know you need faster exception handling and can be certain
you
will never throw an exception through a foreign stack area.

As distributed, the SJLJ and DW2 packages of TDM-GCC can coexist peacefully
extracted to the same directory (e.g. any files in common are for all
intents
and purposes identical), because the driver executables (the ones in the
"bin"
directory) are suffixed with "-dw2" for the DW2 build, and the libraries and
other executables hide in another "-dw2" directory in
"lib(exec)/gcc/mingw32".
This allows you to use the same single addition to your PATH, and use DW2
exceptions only when you need them by calling "gcc-dw2", etc. If you truly
want
DW2 exceptions as the default when calling "gcc" (from Makefiles or
configury
systems, for example), you can rename or copy the suffixed executables to
their
original names.
----------------------------------------------------------------------------
-

After copying the -dw2 executables to their original names, I was able to
build a running hbide with qt 4.6 and MinGW GCC 4.4.1-DWARF-2.

Unfortunately the harbour build has some problems in his postinst:

./bin/win/mingw/hbrun.exe --hb:gtcgi ./bin/postinst.prg
! Making c:\harbour\mingw\bin\hbmk.cfg...
.\bin\postinst.bat
! Making shared version of Harbour binaries...
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbcmplib.o):hbcmplib.c:(.eh_frame
+0x11): undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbmain.o):hbmain.c:(.eh_frame+0x1
1): undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbgenerr.o):hbgenerr.c:(.eh_frame
+0x11): undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbopt.o):hbopt.c:(.eh_frame+0x11)
: undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbdead.o):hbdead.c:(.eh_frame+0x1
1): undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbstripl.o):hbstripl.c:(.eh_frame
+0x11): more undefined references to `__gxx_personality_v0' follow
collect2: ld returned 1 exit status
hbmk2: Error: Running linker. 1
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbcmplib.o):hbcmplib.c:(.eh_frame
+0x11): undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbmain.o):hbmain.c:(.eh_frame+0x1
1): undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbgenerr.o):hbgenerr.c:(.eh_frame
+0x11): undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbopt.o):hbopt.c:(.eh_frame+0x11)
: undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbdead.o):hbdead.c:(.eh_frame+0x1
1): undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbstripl.o):hbstripl.c:(.eh_frame
+0x11): more undefined references to `__gxx_personality_v0' follow
collect2: ld returned 1 exit status
hbmk2: Error: Running linker. 1
c:/harbour/mingw/lib/win/mingw/libhbmainstd.a(mainstd.o):mainstd.c:(.eh_fram
e+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
hbmk2: Error: Running linker. 1
c:/harbour/mingw/lib/win/mingw/libhbmainstd.a(mainstd.o):mainstd.c:(.eh_fram
e+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
hbmk2: Error: Running linker. 1
c:/harbour/mingw/lib/win/mingw/libhbmainstd.a(mainstd.o):mainstd.c:(.eh_fram
e+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld returned 1 exit status
hbmk2: Error: Running linker. 1
! Making hbrun with application icon...
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbcmplib.o):hbcmplib.c:(.eh_frame
+0x11): undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbmain.o):hbmain.c:(.eh_frame+0x1
1): undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbgenerr.o):hbgenerr.c:(.eh_frame
+0x11): undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbopt.o):hbopt.c:(.eh_frame+0x11)
: undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbdead.o):hbdead.c:(.eh_frame+0x1
1): undefined reference to `__gxx_personality_v0'
c:/harbour/mingw/lib/win/mingw/libhbcplr.a(hbstripl.o):hbstripl.c:(.eh_frame
+0x11): more undefined references to `__gxx_personality_v0' follow
collect2: ld returned 1 exit status
hbmk2: Error: Running linker. 1

Maybe this experience clarifies a little bit the Qt 4.6, harbour and MinGW
4.4.x relation.

Best regards,
István


_______________________________________________
Harbour mailing list (attachment size limit: 40KB)
Harbour@harbour-project.org
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to