Re: How to set the QT_DLL macro?

Ralf Habacker <[email protected]>
Newsgroups gmane.comp.kde.devel.cygwin
Message-ID <[email protected]>
On Thursday 21 April 2005 23:51, Angus Leeming wrote:
> Ralf Habacker wrote:
> >>frontends/.libs/libfrontends.a(QBibitemDialogBase.o)(.text+0x583): In
> >>function `_ZNK6QGList5countEv':
> >>/home/angus/lyx/13x/build-mingw-xcompile/src/frontends/qt2/ui/QBibitemDia
> >>logBase.C: variable 'vtable for QSpacerItem' can't be auto-imported.
> >> Please read the documentation for ld's --enable-auto-import for details.
> >
> > This problem is fixed by adding the following line to
> > mkspecs\win32-g++\qmake.conf
> > QMAKE_LFLAGS            = -Wl,--enable-runtime-pseudo-reloc
>
> Hmmmm, not entirely true. I need to pass this flag to the linker, but I
> also need to pass QT_DLL to the compiler. Looking at the explicit echo of
> the compiler call when building the Qt libs, I see that you pass QT_DLL
> directly to the compiler too:
>
> i386-mingw32-g++ -c -Wall -O2 -fno-exceptions -fno-rtti
> -DUNICODE -DQT_DLL -DQT_NO_DEBUG
> -I"../interfaces" -I"../../../include" -I".moc/release-shared/"
> -I"/home/angus/mingw-xcompile/qt3/mkspecs/win32-g++-cross"
> -o .obj/release-shared/editor.o editor.cpp
>
> So, I guess that I'm doing the right thing here. I just need to work out
> how to tell automake to set this flag only when building on (or
> x-compiling for) Windows.

... which is added to the Makefile by qmake 

> > On cygwin I'm using the following switch, which may help to prevet seg
> > faults. It requires a relink of the qt-3.dll
> > QMAKE_LFLAGS            =
> > -Wl,--script,$(QTDIR)/mkspecs/cygwin-g++/i386pe.x-no-rdata
>
> Now that is very, very interesting. I'll try it out. (Am I correct to say
> that only the dll needs to be re-linked?

any executable, which is based on the dll too, because it changes the internal 
address layout of an application. 

> > add a -shared option to configure or add the term 'shared' to
> > .qmake.cache's CONFIG line  (qmake/generators/win32/mingw-make.cpp line
> > 406)
>
> I'm using an automake generated Makefile to build LyX, so I'm going to need
> to understand more about what Qt's "configure -shared" does.
>
I see, QT_DLL is added to a Makefile by qmake based on the current 
configuration. 

> I see that when linking designer.exe you pass a bunch of flags to the
> linker:
>
> i386-mingw32-g++ -Wl,-enable-stdcall-fixup -Wl,-enable-auto-import
> -Wl,-enable-runtime-pseudo-reloc -Wl,-s -Wl,-subsystem,windows -e
> __Z19QtWinMainCRTStartupv
> -o ../../../bin/designer.exe .obj/release-shared/main.o
>
> I'm currently building LyX as a console app, so guess that I don't need the
>     -Wl,-subsystem,windows -e __Z19QtWinMainCRTStartupv
> right?
>
> We've already discussed "-Wl,-enable-auto-import" and
> "-Wl,-enable-runtime-pseudo-reloc".
>
> What do "-Wl,-enable-stdcall-fixup" and "-Wl,-s" do?
>
> >>ps, linking against the qt3.dll is still excrutiatingly slow. Compilation
> >>is far quicker, but the final link still takes ~20 minutes :(
> >
> > This depends on the time of used machine. On a suse linux server system
> > with Xeon 2.6GHz and sata harddisc linking requires about 30-40 seconds.
>
> Linking takes something similar here when I'm linking qt3.dll or am linking
> against the Qt examples programs etc, but expands to 20 minutes when
> linking LyX (a *much* bigger app). This is linking against the qt3.dll.
> I'm using a 2.7GHz machine running Fedora Core 3. Memory usage when
> linking is 70%, so it's not a swap issue.

This is a linker issue. 

 However, Michael Schmitt reports
> that linking reduces to less than a minute when linking statically.

Yes

> >>pps, I may have compiled lyx, but trying to start it up on Windows
> >>results in an error dialog "The application failed to initialise itself
> >>correctly" :(
> >
> > I've heard of similar seg faults with mingw. Do you have tried to link
> > it static ?
>
> Not yet. Actually, what flags do I need to pass to i386-mingw32-g++ to
> ensure it links against libqt3.a not qt3.dll? I tried to just hide qt3.dll
> before linking on mingw/msys yesterday and the bloody thing still linked
> against it :)

this require reconfiguring using the -static option.  

> I'll also try out your magic script above.
> And passing the linker the same set of flags as you use.
the i386pe.x-no-rdata stuff may help to fix segfaults because it is a 
workaround documented at 
http://www.cygwin.com/ml/cygwin/2004-10/msg01052.html

> Lots and lots to try still.
>
> First, I'll wait for the qt lib to finish building in its entirety and will
> try out the examples. Currently we're at examples/dirview...
>
Ralf
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.