X?y ra m?t l?i LNK2005 khi CRT thư vi?n và thư vi?n MFC đư?c liên k?t theo th? t? sai trong Visual C++

D?ch tiêu đ? D?ch tiêu đ?
ID c?a bài: 148652 - Xem s?n ph?m mà bài này áp d?ng vào.
Bung t?t c? | Thu g?n t?t c?

? Trang này

TRI?U CH?NG

Khi thư vi?n c l?n ch?y (CRT) và Microsoft Foundation Thư vi?n Class (MFC) đư?c liên k?t theo th? t? sai, b?n có th? nh?n đư?c m?t trong các LNK2005 l?i sau đây:
nafxcwd.lib(afxmem.obj): l?i LNK2005:
"hi?u * __cdecl đi?u hành m?i (unsigned int)" (??2@YAPAXI@Z) đ?
đư?c đ?nh ngh?a trong LIBCMTD.lib(new.obj)
nafxcwd.lib(afxmem.obj): l?i LNK2005:
"nhà đi?u hành hi?u __cdecl Delete(void *) "(??3@YAXPAX@Z) đ? đư?c xác đ?nh
trong LIBCMTD.lib(dbgnew.obj)
nafxcwd.lib(afxmem.obj): l?i LNK2005:
"hi?u * __cdecl nhà đi?u hành m?i (unsigned int, int, char const *, int)"
(??2@YAPAXIHPBDH@Z) đ? đư?c đ?nh ngh?a trong LIBCMTD.lib(dbgnew.obj)
mfcs40d.lib(dllmodul.obj): l?i LNK2005: _DllMain@12 đ? đư?c đ?nh ngh?a trong
MSVCRTD.LIB (dllmain.obj)
mfcs42d.lib(dllmodul.obj): l?i LNK2005: _DllMain@12 đ? đư?c đ?nh ngh?a trong
msvcrtd.lib(dllmain.obj)

NGUYÊN NHÂN

S? d?ng các thư vi?n CRT y?u m?i liên k?t bên ngoài cho các m?i, xóa, và DllMain ch?c năng. Các thư vi?n MFC c?ng ch?a m?i, xóa, và DllMain ch?c năng. Các ch?c năng này đ?i h?i ph?i có thư vi?n MFC đ? đư?c liên k?t trư?c khi CRT thư vi?n đư?c liên k?t.

GI?I PHÁP

Có hai cách đ? gi?i quy?t v?n đ? này. L?n đ?u tiên gi?i pháp liên quan đ?n vi?c bu?c linker liên k?t thư vi?n ? đúng đ?t hàng. Gi?i pháp th? hai cho phép b?n t?m th?y các mô-đun đó gây ra các v?n đ? và đ? s?a ch?a nó.

Chú ý Các bư?c sau đây đư?c d?a trên Visual C++ 6.0.

Gi?i pháp m?t: L?c lư?ng Linker đ? liên k?t thư vi?n theo th? t? chính xác

  1. Trên các Dự ántr?nh đơn, nh?p vào Thiết đặt.
  2. Trong các Thi?t đ?t cho xem c?a cácThi?t l?p d? án h?p tho?i, nh?n vào đây đ? ch?n d? án c?u h?nh đó là nh?n đư?c l?i liên k?t.
  3. Trên các Liên k?t tab, nh?n vào đây đ? ch?n Đ?u vàotrong các Th? lo?i h?p combo.
  4. Trong các B? qua thư vi?n h?p, chèn tên thư vi?n (cho Ví d?, Nafxcwd.lib;Libcmtd.lib).

    Chú ý Đương d?ng l?nh linker trong /NOD:<library name=""></library>.
  5. Trong các Mô-đun đ?i tư?ng/thư vi?n h?p, chèn tên thư vi?n. B?n ph?i đ?m b?o r?ng chúng đư?c li?t kê theo th? t? và như các thư vi?n hai l?n đ?u tiên trong d?ng (ví d?, Nafxcwd.lib Libcmtd.lib).
Thi?t l?p tùy ch?n này trong Visual C++.NET, đ?c các "cài đ?t Visual Ch? đi?m tr? giúp tr?c tuy?n d? án C++ Properties".

Gi?i pháp hai: Xác đ?nh v? trí và kh?c ph?c v?n đ? Module

Đ? xem hi?n t?i đ?t hàng liên k?t thư vi?n, h?y làm theo các bư?c sau:
  1. Trên các Dự ántr?nh đơn, nh?p vào Thiết đặt.
  2. Trong các Thi?t đ?t cho xem c?a cácThi?t l?p d? án h?p tho?i, nh?n vào đây đ? ch?n d? án c?u h?nh đó là nh?n đư?c l?i liên k?t.
  3. Trên các Liên k?t tab, lo?i/ ti?t: lib trong các Tùy ch?n d? ánh?p.
  4. Xây d?ng l?i d? án c?a b?n. Các thư vi?n s? đư?c li?t kê trong các đ?u ra c?a s? trong ti?n tr?nh liên k?t.

T?NH TR?NG

Đi?u này hành vi là c?a thi?t k?.

THÔNG TIN THÊM

Khi b?n s? d?ng các thư vi?n MFC, b?n ph?i ch?c ch?n r?ng h? đư?c liên k?t trư?c khi thư vi?n CRT đư?c liên k?t. B?n có th? làm đi?u này b?ng cách ch?c ch?n r?ng m?i t?p tin trong d? án c?a b?n bao g?m Msdev\Mfc\Include\Afx.h đ?u tiên, ho?c tr?c ti?p (# bao g?m <afx.h>) ho?c gián ti?p (# bao g?m <stdafx.h>). Afx.h bao g?m l?c lư?ng t?p tin đúng th? t? c?a các thư vi?n, b?ng cách s? d?ng các b?nh lu?n #pragma (lib,"<libname>") ch? th?. <b00></b00></libname></stdafx.h></afx.h>

N?u t?p tin ngu?n này có m?t ph?n m? r?ng .c, ho?c các t?p tin có m?t .cpp ph?n m? r?ng nhưng không s? d?ng MFC, b?n có th? t?o và bao g?m m?t t?p tin tiêu đ? nh? (Forcelib.h) ? đ?u các mô-đun. Tiêu đ? này m?i làm cho ch?c ch?n r?ng thelibrary t?m ki?m th? t? là chính xác.

Visual c ++ không ch?a này t?p tin tiêu đ?. Đ? t?o t?p này, h?y làm theo các bư?c sau:
  1. M? Msdev\Mfc\Include\Afx.h.
  2. Ch?n d?ng gi?a #ifndef _AFX_NOFORCE_LIBS và #endif / /! _AFX_NOFORCE_LIBS.
  3. Sao ph?n ch?n vào b?ng t?m Windows.
  4. T?o m?t t?p tin văn b?n m?i.
  5. Dán n?i dung c?a b?ng t?m vào t?p m?i này.
  6. Lưu t?p tin là Msdev\Mfc\Include\Forcelib.h.

Các bư?c đ? t?o l?i v?n đ? trong Visual c + +.NET

  1. B?t đ?u Microsoft Visual Studio.NET.
  2. Trên các Tệp tr?nh đơn, đi?m đ?nM?i, và sau đó nh?p vào Dự án.
  3. Nh?p vào Visual C++ d? án dư?iCác lo?i d? án, và sau đó nh?p vào ?ng d?ng MFCdư?i Khuôn mẫu.
  4. Trong các Tên h?p văn b?n, lo?iQ148652.
  5. Trong các V? trí h?p văn b?n, lo?iC:\Test, và sau đó nh?p vào Ok.
  6. Trong các MFC ?ng d?ng thu?t s? h?p tho?i, Nh?p vào Lo?i ?ng d?ng.
  7. Nh?p vào H?p tho?i d?a dư?iLo?i ?ng d?ng, và sau đó nh?p vào S? d?ng MFC trong m?t t?nh thư vi?n dư?i S? d?ng MFC.
  8. Nh?p vào K?t thúc.
  9. Trong gi?i pháp Explorer, dư?i T?p tin m? ngu?nch?n t?t c? các t?p tin .cpp ba.
  10. Nh?p chu?t ph?i vào t?p đ? ch?n ba, và sau đó nh?p vàoGỡ bỏ.
  11. Nh?p chu?t ph?i T?p tin m? ngu?n, đi?m đ?nThêm, và sau đó nh?p vào Thêm m?c m?i.
  12. Nh?p vào T?p tin C++ dư?iKhuôn mẫu. Trong các Tên h?p văn b?n, lo?iAA. Nh?p vào M?.
  13. Dán đo?n m? sau trong Aa.cpp file:
    int test(){new int; return 1;}
  14. Nh?p chu?t ph?i T?p tin m? ngu?n, đi?m đ?nThêm, và sau đó nh?p vào Thêm kho?n m?c hi?n có.
  15. Ch?n các t?p sau:
    • Q148652.CPP
    • Q148652Dlg.CPP
    • stdafx.CPP
  16. Nh?p vào M?.
  17. Các t?p tin mà b?n đ? ch?n trong bư?c 15 xu?t hi?n dư?iT?p tin m? ngu?n.
  18. Ch?n t?t c? b?n .cpp t?p tin theo Ngu?n T?p tin.
  19. Nh?p chu?t ph?i vào các t?p tin .cpp b?n mà b?n đ? ch?n, và sau đó Nh?p vào Thu?c tính.
  20. M? r?ng C?u h?nh thu?c tính, và sau đó m? r?ng C/C ++.
  21. Nh?p vào T?o tiêu đ?.
  22. Đ?t các T?o/s? d?ng t?o Headerb?t đ?ng s?n đ? Không s? d?ng Precompiled tiêu đ?. Nh?p vàoOk.
  23. Trên các Xây d?ng tr?nh đơn, nh?p vào Xây d?ng l?i Gi?i pháp.

Thu?c tính

ID c?a bài: 148652 - L?n xem xét sau cùng: 18 Tháng Tám 2011 - Xem xét l?i: 2.0
Áp d?ng
  • 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
T? khóa: 
kbsweptvs2008 kbtshoot kbarttypeinf kberrmsg kbprb kbmt KB148652 KbMtvi
Máy d?ch
QUAN TRỌNG: Bài vi?t này đư?c d?ch b?ng ph?n m?m d?ch máy c?a Microsoft ch? không ph?i do con ngư?i d?ch. Microsoft cung c?p các bài vi?t do con ngư?i d?ch và c? các bài vi?t do máy d?ch đ? b?n có th? truy c?p vào t?t c? các bài vi?t trong Cơ s? Ki?n th?c c?a chúng tôi b?ng ngôn ng? c?a b?n. Tuy nhiên, bài vi?t do máy d?ch không ph?i lúc nào c?ng hoàn h?o. Lo?i bài vi?t này có th? ch?a các sai sót v? t? v?ng, cú pháp ho?c ng? pháp, gi?ng như m?t ngư?i nư?c ngoài có th? m?c sai sót khi nói ngôn ng? c?a b?n. Microsoft không ch?u trách nhi?m v? b?t k? s? thi?u chính xác, sai sót ho?c thi?t h?i nào do vi?c d?ch sai n?i dung ho?c do ho?t đ?ng s? d?ng c?a khách hàng gây ra. Microsoft c?ng thư?ng xuyên c?p nh?t ph?n m?m d?ch máy này.
Nh?p chu?t vào đây đ? xem b?n ti?ng Anh c?a bài vi?t này:148652

Cung cấp Phản hồi

 

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