Tạo một dự án WinCE 7.0 Win32 và thêm một số tệp .cpp và .h.
Khi biên dịch, xuất hiện lỗi CString chưa được định nghĩa, do đó đã thêm #include "atlstr.h".
Sau khi biên dịch dự án WinCE 7.0 Win32, phiên bản Debug gặp lỗi liên kết như sau:
1>ProtocolParse.obj : error LNK2001: Không thể giải quyết external symbol "class ATL::CTraceCategory ATL::atlTraceString" (?atlTraceString@ATL@@3VCTraceCategory@1@A)
1>ProtocolParse.obj : error LNK2001: Không thể giải quyết external symbol "public: static class ATL::CTrace ATL::CTrace::s_trace" (?s_trace@CTrace@ATL@@2V12@A)
1>ProtocolParse.obj : error LNK2019: Không thể giải quyết external symbol AtlTraceVU, biểu tượng này được tham chiếu trong hàm "public: void __cdecl ATL::CTrace::TraceV(char const *,int,unsigned long,unsigned int,wchar_t const *,char *)const " (?TraceV@CTrace@ATL@@QBAXPBDHKIPB_WPAD@Z)
1>ProtocolParse.obj : error LNK2001: Không thể giải quyết external symbol "class ATL::CTraceCategory ATL::atlTraceException" (?atlTraceException@ATL@@3VCTraceCategory@1@A)
1>ProtocolParse.obj : error LNK2001: Không thể giải quyết external symbol "class ATL::CAtlStringMgr ATL::g_strmgr" (?g_strmgr@ATL@@3VCAtlStringMgr@1@A)
1>ProtocolParse.obj : error LNK2019: Không thể giải quyết external symbol "public: struct HINSTANCE__ * __cdecl ATL::CAtlBaseModule::GetHInstanceAt(int)" (?GetHInstanceAt@CAtlBaseModule@ATL@@QAAPAUHINSTANCE__@@H@Z), biểu tượng này được tham chiếu trong hàm "struct HINSTANCE__ * __cdecl ATL::AtlFindStringResourceInstance(unsigned int,unsigned short)" (?AtlFindStringResourceInstance@ATL@@YAPAUHINSTANCE__@@IG@Z)
1>ProtocolParse.obj : error LNK2001: Không thể giải quyết external symbol "class ATL::CAtlBaseModule ATL::_AtlBaseModule" (?_AtlBaseModule@ATL@@3VCAtlBaseModule@1@A)
Trên mạng, giải pháp được đề cập là thêm liên kết với thư viện atlsd.lib, ví dụ: #pragma comment(lib,"atlsd.lib"), và vấn đề đã được giải quyết. Tuy nhiên, khi chuyển đổi dự án sang phiên bản Release, lại xuất hiện các lỗi liên kết khác:
1>atlsd.lib(Allocate.obj) : error LNK2001: Không thể giải quyết external symbol _CrtDbgReportW
1>atlsd.lib(AtlTraceModuleManager.obj) : error LNK2001: Không thể giải quyết external symbol _CrtDbgReportW
1>atlsd.lib(atlbase.obj) : error LNK2019: Không thể giải quyết external symbol _CrtDbgReportW, biểu tượng này được tham chiếu trong hàm "public: __cdecl ATL::CAtlBaseModule::CAtlBaseModule(void)" (??0CAtlBaseModule@ATL@@QAA@XZ)
1>atlsd.lib(atlstr.obj) : error LNK2001: Không thể giải quyết external symbol _CrtDbgReportW
1>atlsd.lib(Externs.obj) : error LNK2001: Không thể giải quyết external symbol _CrtDbgReportW
1>atlsd.lib(AtlDebugAPI.obj) : error LNK2001: Không thể giải quyết external symbol _CrtDbgReportW
Nếu không thêm liên kết với thư viện atlsd.lib, sẽ xuất hiện các lỗi như trên; nếu thêm liên kết, phiên bản Debug đã thông qua nhưng phiên bản Release lại gặp lỗi. Do đó, nghi ngờ rằng vấn đề liên quan đến thư viện atlsd.lib. Thư viện atlsd.lib có vẻ là dành cho phiên bản Debug. Trong thư mục cài đặt SDK, tìm thấy cả hai tệp atlsd.lib và atls.lib.
Cuối cùng, giải pháp được xác định như sau:
1 #ifdef _DEBUG
2 #pragma comment(lib,"atlsd.lib")
3 #else
4 #pragma comment(lib,"atls.lib")
5 #endif
Vấn đề của cả hai phiên bản Debug và Release đều đã được giải quyết.