2012-11-27 118 views
5

Khi tạo ứng dụng MFC mới loại đơn giản nhất trong Visual Studio 2012 và đặt liên kết tĩnh thành MFC, liên kết không thành công.Lỗi liên kết trong mẫu Visual Studio 2012 MFC chưa sửa đổi khi liên kết tĩnh MFC

Đây là gallery of 7 screenshots bắt đầu từ việc tạo dự án thông qua trình hướng dẫn, đến tòa nhà (dẫn đến lỗi trình liên kết). Không có chỉnh sửa nguồn nào được thực hiện ở giữa.

Các bản ghi lỗi nhà nước:

1>------ Build started: Project: Test, Configuration: Debug Win32 ------ 
1> stdafx.cpp 
1> TestDlg.cpp 
1> Test.cpp 
1> Generating Code... 
1>uafxcwd.lib(afxctrlcontainer2.obj) : error LNK2005: "void __cdecl AfxRegisterMFCCtrlClasses(void)" ([email protected]@YAXXZ) already defined in afxnmcdd.lib(afxctrlcontainer2.obj) 
1>uafxcwd.lib(afxctrlcontainer2.obj) : error LNK2005: "protected: void __thiscall CMFCControlContainer::PreUnsubclassControl(class CWnd *)" ([email protected]@@[email protected]@@Z) already defined in afxnmcdd.lib(afxctrlcontainer2.obj) 
1>uafxcwd.lib(afxctrlcontainer2.obj) : error LNK2005: "public: int __thiscall CMFCControlContainer::SubclassDlgControls(void)" ([email protected]@@QAEHXZ) already defined in afxnmcdd.lib(afxctrlcontainer2.obj) 
1>C:\Users\XXXXXXXX\Documents\Visual Studio 2012\Projects\Test\Debug\Test.exe : fatal error LNK1169: one or more multiply defined symbols found 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 

Đây có phải là chỉ cho tôi? Bạn có đề xuất về cách giải quyết vấn đề này không?

+2

Nếu tôi gặp nguy hiểm, tôi đoán rằng thuật sĩ bị hỏng. Nếu bạn đang liên kết với các MFC tĩnh và CRT [thiết lập tự động ma thuật từ afx.h] (http://msdn.microsoft.com/en-us/library/bx5yfk7t.aspx) nên chăm sóc điều này cho bạn . Giả sử bạn đang biên dịch với sự hỗ trợ Unicode (có vẻ như bạn đang, dù sao, ai không có những ngày này?) Lib thích hợp dường như là 'uafxcwd.lib' để gỡ lỗi tĩnh-unicode. Hoặc là lib thứ hai không nên có ở đó, hoặc thứ tự liên kết là sai. Tôi muốn được tò mò muốn biết những gì sẽ xảy ra nếu bạn bật * tắt * Unicode suppport và xây dựng lại-tất cả sau khi thổi đi các tập tin PCH của bạn. – WhozCraig

+1

Tôi nghĩ bạn nên báo cáo lỗi này với Microsoft. Tôi nghĩ rằng bạn có thể làm điều đó ngay từ menu Help trong VS 2012. Sau đó loại bỏ tất cả các thư viện có vẻ không có thật như 'afxnmcdd.lib' từ các tùy chọn liên kết của bạn, và chỉ cần thêm lại' uafxcwd.lib'. Có thể thêm '/ NODEFAULTLIBS' –

+0

@ warren-p Tôi đồng ý. Tôi chắc chắn sẽ làm như vậy, để cứu người khác đau đầu truy tìm vấn đề này. Hy vọng rằng (?) Đó là một lỗi thực sự và không phải là một cái gì đó cụ thể để thiết lập của tôi. – Paul

Trả lời

4

Tôi gặp vấn đề tương tự khi tôi thử liên kết tĩnh dự án của tôi với nhau.

Như Michael Burr đã đề xuất, có vẻ như tốt sau khi nhận xét ra dòng #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS trong stdafx.h.

2

Tôi đã gặp phải vấn đề tương tự. Nếu bạn quyết định #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS và loại bỏ rất nhiều chi phí MFC, bạn cũng nên chắc chắn rằng bạn thay đổi các lớp cơ sở hộp thoại, cuộc gọi phương thức, vv từ CDialogEx thành CDialog.

Nếu bạn không thay đổi màu nền hoặc hình ảnh của hộp thoại, bạn sẽ thấy rằng CDialogEx là khá vô ích anyway.

Các vấn đề liên quan