У нас есть приложение C++, которое я недавно портировал из Linux/gcc для создания на Windows с Visual Studio 2005. В приложении используется сторонняя библиотека, которая предоставляет только DLL-файлы, которые используют оптимизированную DLL-библиотеку CRT (т.е. они не предоставляют эквиваленты, которые ссылаются на DLL отладочной CRT). С VS2005 это, похоже, не проблема = сборка отладки нашла оптимизированную DLL CRT в директории System32.Debug Build App, устанавливающий Release CRT Assemblies
Теперь я пытаюсь создать и запустить наше приложение с VS2008, и сборка отладки не запускается, потому что не удается найти оптимизированную DLL-библиотеку (msvc690.dll). DLL VC9 CRT безводят в каталогах с именем стиля GUID - я считаю, что это бок о бок сборка, и приложение должно найти его с помощью манифеста приложения. Однако очевидно, что будет построен и встроенных в приложение ехе только указывает узел отладки CRT:
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
<security>
<requestedPrivileges>
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
</requestedPrivileges>
</security>
</trustInfo>
<dependency>
<dependentAssembly>
<assemblyIdentity type='win32' name='Microsoft.VC90.DebugCRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b' />
</dependentAssembly>
</dependency>
</assembly>
Я не эксперт для Windows (не больше, по крайней мере), так что это все ново для меня. Какое здесь правильное решение? Мне нужно сообщить компилятору манифеста добавить оптимизированную DLL CRT в сборку? Если да, то как мне это сделать?
Doh, я имею в виду msvcr90.dll. Третья DLL не содержит своего собственного манифеста. Если я открою его в Dep Walker, он будет зависеть от msvcr80.dll. После некоторого дальнейшего расследования я думаю, что эта 3-я партия lib - это красная селедка. Похоже, что одна из наших библиотек связана как с отладочными, так и с оптимизированными DLL-библиотеками CRT. Похоже, что это lib, который имеет зависимость от сторонней библиотеки lib, поэтому может оказаться причиной, но я должен тщательно изучить параметры проекта. Спасибо за помощь в любом случае, я могу вернуться с большим количеством вопросов. –
Мне пришлось явно исключить MSVCRT.lib в настройках проекта для конфигурации отладки, и все это, казалось, сработало.Я буду отмечать этот ответ так же правильно, как кажется, правильно ответить на мой исходный вопрос. –
Если сторонние «dlls» на самом деле являются статическими lib, я должен признать, что решение не имеет большого смысла. Если они являются dll, они должны быть достаточно настойчивыми относительно той DLL, в которой они хотят. Изменение настроек компоновщика приложений не должно меняться, так как сторонние DLL-файлы уже связаны. –