2013-06-03 2 views
1

Я обновил свой проект Win32 от VC6 до VC2010 и исправил множество кодов, которые работают только на VC6, компиляция в порядке, но когда проект начал связываться, он не со следующим сообщениемПочему VC2010 пытается связать dll MFC42 после того, как я обновил проект VC6

LINK: фатальным LNK1104 ошибка: не удается открыть файл «mfc42ud.lib»

Я пытался найти, где MFC42ud называется, но я не могу, это сводит меня с ума ,

Может ли кто-нибудь мне помочь?

обновление:

Теперь я скачал MFC42ud.lib, но по-прежнему ссылаются ошибка, теперь становится

atlsd.lib (atltypes.obj): ошибка LNK2005: «общественность: __thiscall CRect :: CRect (void) "(?? 0CRect @@ QAE @ XZ), уже определенный в mfc42ud.lib (MFC42uD.DLL)

atlsd.lib (atltypes.obj): ошибка LNK2005:" public: int __thiscall CRect :: Width (void) const "(? Width @ CRect @@ QBEHXZ), уже определенный в mfc42ud.lib (MFC42uD.DLL)

atlsd.lib (atltypes.obj): ошибка LNK2005: "public: int __thiscall CRect :: Height (void) const" (? Height @ CRect @@ QBEHXZ), уже определенный в mfc42ud.lib (MFC42uD.DLL)

LINK: фатальным LNK1104 ошибка: не удается открыть файл «mfcs42ud.lib»

кажется, он не совместим, если я просто скопировать MFC42ud.lib, так что теперь ошибка множественного определения

ответ

1

это Unicode Отладка версии MFC DLL для Visual Studio 6, часть дополнительных частей во время установки Visual Studio 6.

Установите его с установочного компакт-диска VS6.

Ссылка: http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/46a26f16-a407-4628-962b-2a6899391293/

P.S. Кстати, это первый результат Google.

+0

Благодарим вас за ответ, но то, что меня пугает, связано с тем, что я обновил проект с VC6 до VC2010, а VC2010 также содержит самую последнюю библиотеку MFC, почему он по-прежнему пытается связать MFC 4.2, который предоставляется от VC6? Не следует ли пытаться связать последнюю, предоставленную в 2010 году? – mikeshi

+0

Это потому, что у вас все еще есть связь со старой библиотекой. – Raptor

+0

Спасибо за ваш ответ. Как я могу изменить связь? Я проверил все настройки проекта, я не смог найти способ. – mikeshi

2

ОК, наконец, я разрешил это. Это потому, что есть некоторые библиотеки, мне нужна ссылка, и в этих библиотеках есть некоторая информация о связях.

Причиной является Microsoft VC указано препроцессора #pragma комментарий (ОМТ, «some.lib»)

На самом деле это действительно плохое решение, особенно для связи обеспечиваемые системой LIBS, как тк LIBS. Даже если вы обновили проект, он по-прежнему хочет связать старые библиотеки mfc.

Решение состоит в том, чтобы игнорировать старые библиотеки mfc.

+0

Сбой, поскольку VC6 и VC2010 генерируют разные символы для C++-методов, игнорируя библиотеки mfc42, вызывают неразрешенные сиболы для CString и некоторых других. Возможно, это невозможно, если вы хотите обновить проект VC6, который содержит старые библиотеки для VC2010. – mikeshi

+0

Я сталкиваюсь с этим. Мой проект (который вчера строился хорошо), вдруг жалуется, что не может ссылаться на MFC42.lib. Насколько мне известно, ему не нужно ссылаться на MFC42. Я не могу найти никаких настроек для него и даже не могу найти комментарий #pragma. Я в тупике. – abelenky

0

В моем случае, мой проект был связываннии другой библиотеки, и эта библиотека была построена с

#pragma comment(lib, "mfc42.lib") 

внутри него.

Ссылка на эту библиотеку в моем проекте поручила моему проекту связать с mfc42.lib, хотя I никогда не было таких настроек.

Отслеживание и удаление повреждающей библиотеки было непростым.

Смежные вопросы