Помилка LNK2005 виникає, коли CRT бібліотеки та бібліотеки MFC зв'язані у неправильному порядку в Visual C++

Переклади статей Переклади статей
Номер статті: 148652 - Показ продуктів, яких стосується ця стаття.
Розгорнути все | Згорнути все

На цій сторінці

ОЗНАКИ

Коли бібліотека c під Вільний час (ЕПТ) і Microsoft фонду Бібліотек класів (MFC) зв'язаних у неправильному порядку, може з'явитися одне з на такі помилки LNK2005:
nafxcwd.lib(afxmem.OBJ): Помилка LNK2005:
«void * __cdecl оператором нового (непідписані int) "(???2@YAPAXI@Z) вже
визначено у LIBCMTD.lib(new.obj)
nafxcwd.lib(afxmem.OBJ): помилка LNK2005:
«void __cdecl оператор DELETE(void *) "(??Вже визначено 3@YAXPAX@Z)
у LIBCMTD.lib(dbgnew.obj)
nafxcwd.lib(afxmem.OBJ): помилка LNK2005:
"недійсними * оператор __cdecl новий (непідписані int, int, Чар константа *, int)"
(??2@YAPAXIHPBDH@Z) вже визначені в LIBCMTD.lib(dbgnew.obj)
mfcs40d.lib(dllmodul.OBJ): помилка LNK2005: _DllMain@12, вже визначено в
MSVCRTD.LIB (dllmain.obj)
mfcs42d.lib(dllmodul.OBJ): помилка LNK2005: _DllMain@12, вже визначено в
msvcrtd.lib(dllmain.OBJ)

ПРИЧИНА

Бібліотеках CRT сценарій виконання слабких зовнішній зв'язок для нових, Видалитиі функції DllMain . MFC бібліотек також містять Нова, Видалитиі DllMain функції. Ці функції вимагають MFC бібліотеки, щоб бути пов'язані перед ЕЛТ зв'язаний бібліотеки.

РОЗВ'ЯЗАНН

Є два шляхи, щоб вирішити цю проблему. Перший рішення передбачає, змушуючи компонувальник посилання бібліотек у правильне замовлення. Друге рішення дозволяє знайти модуль, який викликає у проблему та виправити її.

Примітка Такі інтерактивні елементи на основі Visual C++ 6.0.

Рішення одному: Сили компонувальник посилання бібліотекам у правильному порядку

  1. На що Проектменю, натисніть Параметри.
  2. У регіоні Параметри для вигляд наНалаштування проекту діалогове вікно, щоб виділити проекту конфігурації, що стає помилки посилання.
  3. На що Посилання TAB, щоб виділити Введенняу регіоні Категорія область коректування.
  4. У регіоні Ігнорувати бібліотеки поле, вставити імена бібліотеки (для Наприклад, Nafxcwd.lib;Libcmtd.lib).

    Примітка Компонувальник командний рядок еквівалент в /NOD:<library name=""></library>.
  5. У регіоні Бібліотека об'єктів/модулі поле, Вставити імена бібліотеки. Ви повинні переконатися, що дані перераховані в порядку і як перші дві бібліотеки в лінії (наприклад, Nafxcwd.lib Libcmtd.lib).
Щоб встановити цей параметр в Visual C++ .net, читати в «параметр візуальні Властивості проекту C++"онлайн розділ довідки.

Два рішення: Знайти і виправити проблему модуль

Щоб переглянути поточний бібліотеки посилання порядку, виконайте такі дії:
  1. На що Проектменю, натисніть Параметри.
  2. У регіоні Параметри для вигляд наНалаштування проекту діалогове вікно, щоб виділити проекту конфігурації, що стає помилки посилання.
  3. На що Посилання вкладки, тип/ детального: lib у регіоні Параметри проектуполе.
  4. Відновити ваш проект. Бібліотеки, будуть перераховані в регіоні вікно виводу оперативне зв'язування.

СТАН

Це ситуація передбачена.

ДОДАТКОВІ ВІДОМОСТІ

Під Вільний час сценарій виконання MFC бібліотек, ви повинні переконатися, що вони пов'язані, перш ніж зв'язаний CRT бібліотеки. Ви можете зробити це шляхом прийняття впевнений, що кожен файл у ваш проект містить Msdev\Mfc\Include\Afx.h по-перше, прямо (# включити <Afx.h>) або опосередковано (# включити <Stdafx.h>). На Afx.h включають файл сил правильний порядок на бібліотек, за допомогою #pragma коментар (система lib замків,"<libname>") Директиви. </libname></Stdafx.h></Afx.h>

Якщо вихідний файл має розширення .c, або файл має на cpp розширення, але не використовувати MFC, ви можете створити і включати невеликий файл (Forcelib.h) у верхній частині модуля. Цей новий заголовка гарантує, що thelibrary порядок пошуку є правильним.

Це не містить Visual c + + файл-заголовок. Щоб створити цей файл, виконайте такі дії:
  1. Відкрити Msdev\Mfc\Include\Afx.h.
  2. Виділіть рядки між #ifndef _AFX_NOFORCE_LIBS і #endif / /! _AFX_NOFORCE_LIBS.
  3. Копіювання виділеного фрагмента до буфера обміну Windows.
  4. Створення нового текстового файлу.
  5. Вставити вміст буфера обміну в цей новий файл.
  6. Зберегти файл як Msdev\Mfc\Include\Forcelib.h.

Відтворити проблему в Visual C++ .net

  1. Запустити Microsoft Visual Studio .net.
  2. На що Файл меню, до точкиНовіа потім натисніть кнопку Проект.
  3. Натисніть кнопку Visual C++ проекти у розділіТипи проектуа потім натисніть кнопку MFC застосуванняу розділі Шаблони.
  4. У регіоні Ім’я текстове поле, типQ148652.
  5. У регіоні Розташування текстове поле, типC:\Testа потім натисніть кнопку Гаразд.
  6. У регіоні Майстер MFC застосування діалогове вікно, натисніть кнопку Тип додатка.
  7. Натисніть кнопку діалогове вікно на основі у розділіТип додаткаа потім натисніть кнопку сценарій виконання MFC у статичні Бібліотека у розділі сценарій виконання MFC.
  8. Натисніть кнопку Готово.
  9. У провіднику рішення під Вихідні файлиВиділити все три cpp файли.
  10. Клацніть правою кнопкою миші трьох вибраних файлів і натисніть кнопкуВидалити.
  11. Клацніть правою кнопкою миші Вихідні файли, наведіть вказівник на пунктДодатиа потім натисніть кнопку Додати новий елемент.
  12. Натисніть кнопку Файли C++ у розділіШаблони. У регіоні Ім’я текстове поле, типА. а.. Натисніть кнопку Відкрити.
  13. Вставте наступний код у файлі Aa.cpp:
    int test(){new int; return 1;}
  14. Клацніть правою кнопкою миші Вихідні файли, наведіть вказівник на пунктДодатиа потім натисніть кнопку запит на додавання наявного елемента.
  15. Виберіть такі файли:
    • Q148652.cpp
    • Q148652Dlg.cpp
    • stdafx.cpp
  16. Натисніть кнопку Відкрити.
  17. З'являються файли, вибраного в кроці 15 підВихідні файли.
  18. Виділити все чотири cpp файли під Джерело Файли.
  19. Клацніть правою кнопкою миші чотири cpp файли, які ви вибрали, а потім натисніть кнопку Властивості.
  20. деталізувати Налаштування властивостейа потім деталізувати C/C + +.
  21. Натисніть кнопку Скомпільованого заголовки.
  22. Встановити на Створити/використання скомпільованого заголовкавластивість Не використовувати Precompiled заголовків. Натисніть кнопкуГаразд.
  23. На що Побудувати меню, натисніть Відновити Рішення.

Властивості

Номер статті: 148652 - Востаннє переглянуто: 6 липня 2012 р. - Редакція: 2.0
ЗАСТОСОВУЄТЬСЯ ДО:
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ .NET 2002 Standard Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Ключові слова: 
kbsweptvs2008 kbtshoot kbarttypeinf kberrmsg kbprb kbmt KB148652 KbMtuk
Машинний переклад
УВАГА! Цю статтю переклала програма машинного перекладу Microsoft, а не людина. Корпорація Microsoft пропонує вам як машинні переклади, так і переклади фахівців, щоб Ви мали доступ до всіх статей бази знань рідною мовою. Проте стаття, яку переклав комп’ютер, не завжди бездоганна. Вона може містити лексичні, синтаксичні або граматичні помилки. Так само помиляється іноземець, спілкуючись вашою рідною мовою. Корпорація Microsoft не несе відповідальність за жодні неточності, помилки або шкоду, завдану неправильним перекладом змісту або його використанням з боку користувачів. Крім того, корпорація Microsoft часто оновлює програму машинного перекладу.
Клацніть тут, щоб переглянути цю статтю англійською мовою: 148652

Надіслати відгук

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com