0
我使用Microsoft Visual Studio 2010並使用C++編寫。有沒有辦法將靜態鏈接與STL鏈接?
我的應用程序應該是輕量級的;因此我使用DDK的msvcrt.lib
將我的應用程序與存在於任何Windows中的msvcrt.dll
鏈接起來。這個技巧允許我不使用靜態鏈接(libcmt),也不使用MSVC Redistributables中的DLL;所以減少了我的可執行文件的大小。
但現在我需要在我的應用程序中使用STL。有沒有辦法只與STL鏈接一些庫?我從DDK拿了libcpmt.lib
,並試圖與它聯繫;這是我得到了什麼:
1>main.obj : error LNK2001: unresolved external symbol "public: virtual char const * __thiscall std::exception::what(void)const " ([email protected]@[email protected]@UBEPBDXZ)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall std::exception::~exception(void)" ([email protected]@@[email protected])
1>main.obj : error LNK2001: unresolved external symbol "public: __thiscall std::exception::exception(char const * const &)" ([email protected]@@[email protected]@Z)
1>main.obj : error LNK2001: unresolved external symbol "public: __thiscall std::exception::exception(class std::exception const &)" ([email protected]@@[email protected]@@Z)
1>main.obj : error LNK2001: unresolved external symbol "void __cdecl std::_Xlength_error(char const *)" ([email protected]@@[email protected])
如何鏈接我的libcpmt.lib
從DDK應用?鏈接後將多少字節添加到可執行文件?是否有另一個(第三方)STL輕量級?
只是fyi tst :: exception不是STL的一部分,它是C++標準庫的一部分。 – PeterT
我知道;但它在'libcpmt.lib'中,不是嗎? – deselect
IIRC MSVC中的STL根本不需要鏈接。話雖如此,你的應用程序可能比你想象的要沉重得多。你認爲'msvcrt便宜?它位於Microsoft不應該依賴的事物的黑名單上。當你觸摸它時,你的過程是自動懷疑的。預計Windows會啓動它的應用程序兼容性工作,以確保您的過時應用程序仍然運行在現代Windows版本上(現代=本世紀; MSVCRT可以追溯到1998年)。 – MSalters