[Qt-interest] DLL issues with latest 4.5 SDK

Nathan Carter nathancarter5 at gmail.com
Mon Mar 9 21:46:33 CET 2009


Dear list,

I have been developing an app on Mac and Linux, and it's time for a  
release, so I downloaded the latest Qt 4.5 SDK for Windows to build  
the Win version.  I've built software recently and successfully with  
Qt4.4+MinGW on Windows, so I didn't expect the problems I found.  But  
this is my first time with Qt 4.5, so perhaps those are the  
differences I'm experiencing.  Here's what I did and what happened,  
including my several questions.

I started doing a debug build so that I could test before I release.   
The resulting .EXE therefore expects QtCored4.dll, QtGuid4.dll, etc.  
(note the d's).  But the SDK doesn't come with those; it only has the  
QtCore4.dll, QtGui4.dll, etc. (note the lack of d's).

Question #1: Must I download the sources and build in debug mode to  
get the debug DLLs, or is there an easier way to get them?  (Google,  
surprisingly, doesn't seem to have the answer for this one yet.)

So anyway, I moved on to release mode, which is what I wanted to do  
eventually anyway.  The resulting .EXE therefore expects the DLLs  
without the d's.  But when I toss the .exe and all the necessary DLLs  
(mingwm10.dll, QtCore4.dll, QtGui4.dll, QtWebkit4.dll, QtScript4.dll,  
QtNetwork4.dll) into the same directory and double-click the .exe, I  
get this error:

	The procedure entry point _Z17qt_message_output9QtMsgTypePKc could  
not be located in the dynamic link library QtCore4.dll

Google results suggest that my DLLs are too old or too new, and I  
should get the right version.  But of course the DLL came from the Qt 
\bin directory of the recently-installed SDK, and the binary of my  
application was just built with that very SDK.

Question #2: So what's up with that?

Lastly, using dependency walker, I can tell that my EXE is also  
depending on the following files (which are new to me--old builds of  
similar software on Qt4.4 did not need them) and dependency walker  
says it can't find these files:
	MSVCR90.DLL
	MSJAVA.DLL
This suggests that even if I fix the Qt*.DLL issues, these new issues  
will haunt me.  The MSVCR90.DLL is an indirect dependency of my  
application, like this (--> means "depends on"):

	my.EXE --> QtCore4.dll --> MSVCP90.DLL --> MSVCR90.DLL

And yet, QtCore4.dll also depends *directly* on MSVCR90.DLL, and  
dependency walker can find *that* file (the direct dependency) without  
a problem (!).

Question #3: Do .EXEs have references to DLLs by path name and not  
just filename?  If not, what explanation is there for two different  
MSVCR90.DLLs, one findable and the other missing?  And if they are  
referenced by path, when did that change, and does it flummox my hopes  
of just dumping all the DLLs in the same directory as the executable  
with my installer one day?

The dependency chain for MSJAVA.DLL is enormous (WS2_32.DLL -->  
USER32.DLL --> WINSTA.DLL --> NETAPI32.DLL --> DNSAPI.DLL -->  
IPHLPAPI.DLL --> MPRAPI.DLL --> SETUPAPI.DLL --> SHELL32.DLL -->  
SHDOCVW.DLL --> MSHTML.DLL --> IMGUTIL.DLL --> MSJAVA.DLL) but my  
question is:

Question #4: Any clue why that DLL is missing, or why it's even  
needed?  (I do nothing with Java in my app.)  Also, I think I've used  
WS2_32 before without needing MSJAVA.DLL, so did something recently  
change?

Phew!  Thank you to anyone who can shed any light on this headache!

Nathan




More information about the Qt-interest-old mailing list