2010-10-27 5 views
0

Je compile l'application wxWidgets avec DialogBlocks sur Windows 7 avec VS2005 installé. La construction est réussie, mais l'exécutable ne s'exécute pas donnant le message: "Le programme ne peut pas démarrer parce que MSVCR80D.dll est absent de votre ordinateur". Le même code créé dans Visual Studio est OK. Construire journal:DialogBlocks sur Windows: MSVCR80D.dll est manquant

 
----------------------- Configuration: VC++ Debug ----------------------- 
In directory: C:\Users\alexm\Documents\DialogBlocks Projects\Test1 
nmake /nologo -f makefile.vc CONFIG=debug clean all 
    if exist VCDebug\*.obj del VCDebug\*.obj 
    if exist VCDebug\*.res del VCDebug\*.res 
    if exist VCDebug\Test11.exe del VCDebug\Test11.exe 
    if exist VCDebug\Test11.ilk del VCDebug\Test11.ilk 
    if exist VCDebug\Test11.pdb del VCDebug\Test11.pdb 
    cl.exe /c /nologo /TP /FoVCDebug\mainframe.obj /DNOPCH /DWIN32 /D__WXMSW__ /D_WINDOWS /D__WXDEBUG__ /D_DEBUG /Zi /MDd /Od /GR /EHsc /W4 /I"C:\wxWidgets-2.8.10/include" /I"C:\wxWidgets-2.8.10/contrib/include" /I"C:\wxWidgets-2.8.10/lib/vc_lib/mswd" /I"C:\Program Files (x86)\Microsoft Visual Studio 8\vc\include" /I"C:\Program Files (x86)\Microsoft Visual Studio 8\vc\PlatformSDK\include" mainframe.cpp 
mainframe.cpp 
    cl.exe /c /nologo /TP /FoVCDebug\test11app.obj /DNOPCH /DWIN32 /D__WXMSW__ /D_WINDOWS /D__WXDEBUG__ /D_DEBUG /Zi /MDd /Od /GR /EHsc /W4 /I"C:\wxWidgets-2.8.10/include" /I"C:\wxWidgets-2.8.10/contrib/include" /I"C:\wxWidgets-2.8.10/lib/vc_lib/mswd" /I"C:\Program Files (x86)\Microsoft Visual Studio 8\vc\include" /I"C:\Program Files (x86)\Microsoft Visual Studio 8\vc\PlatformSDK\include" test11app.cpp 
test11app.cpp 
    rc.exe /foVCDebug\Test11.res /DNOPCH /DWIN32 /D__WXMSW__ /D_WINDOWS /D__WXDEBUG__ /D_DEBUG /I "C:\wxWidgets-2.8.10/include" /I "C:\wxWidgets-2.8.10/contrib/include" /I "C:\wxWidgets-2.8.10/lib/vc_lib/mswd" /I "C:\Program Files (x86)\Microsoft Visual Studio 8\vc\include" /I "C:\Program Files (x86)\Microsoft Visual Studio 8\vc\PlatformSDK\include" Test11.rc 
link.exe /OUT:VCDebug\Test11.exe /LIBPATH:"C:\wxWidgets-2.8.10/lib/vc_lib" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 8\vc\lib" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 8\vc\PlatformSDK\lib" /nologo /SUBSYSTEM:WINDOWS /machine:i386 /DEBUG VCDebug\mainframe.obj VCDebug\test11app.obj VCDebug\Test11.res wxmsw28d_richtext.lib wxmsw28d_aui.lib wxmsw28d_html.lib wxmsw28d_xrc.lib wxmsw28d_core.lib wxbase28d.lib wxtiffd.lib wxjpegd.lib wxpngd.lib wxzlibd.lib wxregexd.lib wxmsw28d_adv.lib wxmsw28d_html.lib wxmsw28d_xrc.lib wxbase28d_net.lib wxbase28d_xml.lib wxexpatd.lib kernel32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib winmm.lib shell32.lib comctl32.lib ole32.lib oleaut32.lib uuid.lib rpcrt4.lib advapi32.lib wsock32.lib 
    link.exe /OUT:VCDebug\Test11.exe /LIBPATH:"C:\wxWidgets-2.8.10/lib/vc_lib" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 8\vc\lib" /LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 8\vc\PlatformSDK\lib" /nologo /SUBSYSTEM:WINDOWS /machine:i386 /DEBUG @C:\Users\alexm\AppData\Local\Temp\nmB05C.tmp 
Done. 

0 errors, 0 warnings 

fichier Manifest:

 
<?xml version='1.0' encoding='UTF-8' standalone='yes'?> 
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity type='win32' name='Microsoft.VC80.DebugCRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /> 
    </dependentAssembly> 
    </dependency> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity type='win32'    name='Microsoft.Windows.Common-Controls'  version='6.0.0.0'        processorArchitecture='x86'     publicKeyToken='6595b64144ccf1df'    language='*' /> 
    </dependentAssembly> 
    </dependency> 
    <dependency> 
    <dependentAssembly> 
     <assemblyIdentity type='win32' name='Microsoft.VC80.CRT' version='8.0.50727.762' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' /> 
    </dependentAssembly> 
    </dependency> 
</assembly> 

Puis-je changer quelques drapeaux compilateur/éditeur de liens, ou faire un changement sur mon ordinateur, pour permettre cet exécutable de fonctionner?

Répondre

0

Le cas est que le compilateur cl.exe a été fourni avec l'indicateur /MDd qui lui indique de lier par rapport aux versions de bibliothèque partagée. Essayez plutôt /MTd.


Le problème peut avoir été provoqué par les bibliothèques wxWidgets si elles ont été générées avec l'exécution partagée. Habituellement, vous n'êtes pas autorisé à créer des projets avec différentes versions de vc runtime. Dans ce cas, vous pouvez explorer si wxWidgets fournit des bibliothèques construites avec une exécution statique ou non. Souvent, ils le font.


Juste pour être clair. Vous n'êtes pas autorisé à lier des fichiers binaires avec des bibliothèques et des fichiers d'objets s'ils ont été compilés avec différentes versions de vc runtime. Sur ma machine j'ai MSVS 2005 mais j'ai une version légèrement différente de l'exécution de débogage de CRT.

<assemblyIdentity type="win32" name="Microsoft.VC80.DebugCRT" version="8.0.50608.0" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b" />

Une raison possible est que vous soit sur les autres auteurs de la bibliothèque de la main ont MSVS 2005 SP1 installé.

HTH.

+0

Essayé cela, maintenant j'ai beaucoup de messages de l'éditeur de liens comme: MSVCRTD.lib (MSVCR80D.dll): erreur LNK2005: _free déjà défini dans LIBCMTD.lib (dbgheap.obj) Avez-vous une idée comment corriger cela? –

+0

La liaison statique à CRT n'est pas très agréable, mais dans tous les cas ma construction principale est dans Visual Studio. Je veux juste que la construction de DialogBlocks fonctionne aussi, donc c'est OK de construire statiquement, si ça marche. –

+0

@Alex Mon mal, maintenant il est clair que wxWidgets est le cas car il a été construit avec '/ MDd' aussi. Donc, mon deuxième point est vrai. Si vous êtes capable de construire des wxWidgets à partir de sources, faites-le. Si ce n'est pas le cas, avez-vous * des * wxWidgets déboguer des bibliothèques autres que celles que vous utilisez? – Keynslug

Questions connexes