Bạn hiện đang ngoại tuyến, hãy chờ internet để kết nối lại

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++

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
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.
nafxcwd

Cảnh báo: Bài viết này được dịch tự động

Thuộc tính

ID Bài viết: 148652 - Xem lại Lần cuối: 08/18/2011 10:24:00 - Bản sửa đổi: 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 KbMtvi
Phản hồi