13

Gần đây tôi đã nâng cấp lên năm 2012 từ năm 2005 (tôi khá chắc chắn) và gặp phải lỗi liên kết khi xây dựng giải pháp của mình. Tôi đã hết các ý tưởng sau hàng giờ tìm kiếm trên google và đặt xung quanh. Tôi đã thiết lập hàng chục dự án, vì vậy tôi khá chắc chắn tôi đã làm mọi thứ đúng, nhưng để công bằng, nó đã được một vài năm.Lỗi liên kết Visual Studio 2012 với các thư viện tĩnh

Vì vậy, khi thử nghiệm, tôi thiết lập dự án mới. Tôi gọi nó là Ứng dụng, một ứng dụng Windows (.exe). Tôi đã tạo ra một dự án thứ hai có tên là Core và đã gắn cờ nó là một thư viện tĩnh (.lib) trong đó là Loại Cấu hình. Cả hai đều là một phần của giải pháp. Trong Core tôi đã thêm Test.cpp và Test.h chứa một lớp nhỏ có hàm đơn giản trong đó. Sau đó, bên trong các ứng dụng Window của WinMain.cpp, tôi có WinMain() nơi tôi gọi vào lớp kiểm tra này thông qua kiểm tra CTEST; kết quả kiểm tra();

Cùng với điều này, tôi đã đặt dự án Phụ thuộc của Ứng dụng thành Lõi và cuối cùng được thêm vào Thư mục bổ sung bao gồm đường dẫn đến mã cốt lõi nơi Test.cpp/.h live.

Tôi nhận được các lỗi liên kết sau và không thể cho cuộc sống của tôi tìm ra lý do. Có ai biết những gì tôi có thể đã bỏ lỡ hoặc những gì đã thay đổi trong năm 2012 từ các phiên bản trước? Cảm ơn bạn rất nhiều trước vì sự giúp đỡ!

1>------ Build started: Project: App, Configuration: Debug Win32 ------ 
1>WinMain.obj : error LNK2019: unresolved external symbol "public: __thiscall CTest::CTest(void)" ([email protected]@[email protected]) referenced in function [email protected] 
1>WinMain.obj : error LNK2019: unresolved external symbol "public: __thiscall CTest::~CTest(void)" ([email protected]@[email protected]) referenced in function [email protected] 
1>WinMain.obj : error LNK2019: unresolved external symbol "public: int __thiscall CTest::Result(void)" ([email protected]@@QAEHXZ) referenced in function [email protected] 
1>D:\Work\Test_Linker_Stupidity\App\Debug\App.exe : fatal error LNK1120: 3 unresolved externals 
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ======== 

Trả lời

27

Visual Studio 2005 đã làm một số kỳ diệu với phụ thuộc dự án mà nó sẽ tự động liên kết trong bất kỳ kết quả đầu ra lib (Tôi không may là các nhà phát triển đã giúp thực hiện nó). Điều này dường như đã được gỡ bỏ kể từ khi, tôi nghi ngờ, Visual Studio 2010 khi cũ Visual C++ xây dựng hệ thống đã được thay thế bằng MSBuild.

Tuy nhiên, "tự động liên kết các thư viện phụ thuộc tĩnh" tính năng vẫn có thể được tìm thấy qua tài liệu tham khảo dự án:

  • Nhấp chuột phải vào dự án ứng dụng và chọn "Tài liệu tham khảo ..."
  • Bấm "Add Tham khảo mới ".
  • Kiểm tra dự án thư viện tĩnh và nhấn OK.
  • Xây dựng.

Bây giờ bạn sẽ thấy thư viện tĩnh được tự động liên kết. Lưu ý rằng tham chiếu dự án cũng ngụ ý phụ thuộc vào dự án.

Nếu bạn muốn sử dụng phụ thuộc dự án, bạn cần phải thêm thư viện tĩnh vào thuộc tính phụ thuộc bổ sung của liên kết trên dự án "Ứng dụng", giống như bạn cho bất kỳ đầu vào thư viện tĩnh nào khác.

Chỉnh sửa: ngoài ra, bạn sẽ thấy thuộc tính có tên "Liên kết phụ thuộc thư viện" trên tham chiếu dự án. Điều này kiểm soát xem đầu ra .lib của dự án được tham chiếu có được liên kết trong hay không (mặc định là đúng).

+1

Cảm ơn Peter! Tôi đã ping một số người bạn trên FB tối qua và họ chỉ cho tôi theo cùng một hướng. Thật ngạc nhiên khi tôi không tìm thấy bất kỳ bài viết nào khác tham chiếu đến cùng một giải pháp, vì vậy hy vọng điều này sẽ có lợi cho người khác trong tương lai. Tôi cũng đã thử thêm các libs đầu vào, mà chắc chắn đã làm việc, nhưng ít hơn lý tưởng. Tôi thực sự quên rằng tôi đã thử giải pháp đó, một cách ngắn gọn. Cảm ơn bạn lần nữa vì đã giúp đỡ! –

+0

Để tham khảo nhanh, đây là liên kết tôi đã được trỏ đến: http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/d69aeb0d-e5fb-41e1-98ad-9b6c7b43a3ca/# c8b80c9a-2e8d-4a06-9d0f-a63ee15a208e –

+0

Rất hữu ích, cảm ơn Peter. – Ken

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