Tôi có một dự án cũ được biên dịch trong VS2005 (Đáng buồn thay). Nó vẫn còn trong VS2005 để nó có thể liên kết đúng với một quá trình khác có VS2005 CRT, MFC, v.v.Lỗi liên kết khi cố gắng biên dịch đối với thư viện STD cũ và các cửa sổ SDK
Bây giờ tôi cần biên dịch dự án này trong VS2015, sử dụng bộ công cụ VS2005 cũ.
Tôi đã thay đổi thư mục VC++ của dự án thành các thư mục cũ cho tất cả tiêu đề STD và Windows SDK (Bao gồm thư mục, Thư mục tham khảo, Thư mục thư viện, Thư mục nguồn).
Thủ thuật này sử dụng để hoạt động tốt khi làm việc với VS2010, nhưng trên VS2015 tôi nhận được một số lỗi liên kết kỳ lạ:
1>Project1.obj : error LNK2019: unresolved external symbol "void __stdcall `eh vector destructor iterator'(void *,unsigned int,unsigned int,void (__thiscall*)(void *))" ([email protected]@[email protected]) referenced in function "public: virtual void * __thiscall PluginInterface::`vector deleting destructor'(unsigned int)" (??_E[email protected]@[email protected])
1> 1>
1>StdAfx.obj : error LNK2001: unresolved external symbol "void __stdcall `eh vector destructor iterator'(void *,unsigned int,unsigned int,void (__thiscall*)(void *))" ([email protected]@[email protected])
1> 1>
1>Project1.obj : error LNK2019: unresolved external symbol "void __cdecl operator delete(void *,unsigned int)" ([email protected]@Z) referenced in function [email protected]@@[email protected]$0
1> 1>
1>Project1.obj : error LNK2019: unresolved external symbol "void __cdecl operator delete[](void *,unsigned int)" ([email protected]@Z) referenced in function "public: virtual void * __thiscall PluginInterface::`vector deleting destructor'(unsigned int)" ([email protected]@[email protected])
Tại sao nó tìm kiếm thực hiện bên trong này của deleter? Nó có nên được thực hiện từ các tiêu đề? Tại sao nó hoạt động trong VS2010 chứ không phải VS2015?
Làm cách nào để khắc phục sự cố này đúng cách?
Bạn đã thử đặt thuộc tính đầu vào của trình liên kết để bỏ qua các thư viện mặc định? – Mahesh
Có, và nó chỉ làm cho nó tồi tệ hơn. Những biểu tượng đó đã bị mất tích cùng với một loạt những người khác. –
Đây là những hàm trợ giúp được tạo tự động, Raymond Chen nói về chúng trong [bài đăng blog cũ này] (https://blogs.msdn.microsoft.com/oldnewthing/20040203-00/?p=40763). Tên của họ đã thay đổi, bây giờ là tiền tố "eh" với tên của họ. Tôi đoán nó có một cái gì đó để làm với hành vi mới yêu cầu cho các * static * từ khóa trong C + + 11. Không phải cái gì bạn có thể tắt, biên dịch mà không có/EH là hầu như không một workaround vì vậy bạn đang khá nhiều hơi say. –