是否有一种方法仅将静态链接到STL? < >我使用微软Visual Studio 2010,用C++编写.< /P>

是否有一种方法仅将静态链接到STL? < >我使用微软Visual Studio 2010,用C++编写.< /P>,c++,visual-c++,stl,static-linking,C++,Visual C++,Stl,Static Linking,我的应用程序应该是轻量级的;因此,我使用DDK中的msvcrt.lib将我的应用程序链接到任何窗口中存在的msvcrt.dll。这个技巧允许我不使用MSVC可再发行文件中的静态链接(libcmt)或DLL;所以它减少了可执行文件的大小 但是现在我需要在我的应用程序中使用STL。有没有办法只为STL链接一些库?我从DDK中获取libcpmt.lib,并尝试与之链接;这就是我得到的: 1>main.obj : error LNK2001: unresolved external symbol

我的应用程序应该是轻量级的;因此,我使用DDK中的
msvcrt.lib
将我的应用程序链接到任何窗口中存在的
msvcrt.dll
。这个技巧允许我不使用MSVC可再发行文件中的静态链接(libcmt)或DLL;所以它减少了可执行文件的大小

但是现在我需要在我的应用程序中使用STL。有没有办法只为STL链接一些库?我从DDK中获取
libcpmt.lib
,并尝试与之链接;这就是我得到的:

1>main.obj : error LNK2001: unresolved external symbol "public: virtual char const * __thiscall std::exception::what(void)const " (?what@exception@std@@UBEPBDXZ)
1>main.obj : error LNK2001: unresolved external symbol "public: virtual __thiscall std::exception::~exception(void)" (??1exception@std@@UAE@XZ)
1>main.obj : error LNK2001: unresolved external symbol "public: __thiscall std::exception::exception(char const * const &)" (??0exception@std@@QAE@ABQBD@Z)
1>main.obj : error LNK2001: unresolved external symbol "public: __thiscall std::exception::exception(class std::exception const &)" (??0exception@std@@QAE@ABV01@@Z)
1>main.obj : error LNK2001: unresolved external symbol "void __cdecl std::_Xlength_error(char const *)" (?_Xlength_error@std@@YAXPBD@Z)

如何将我的应用程序链接到DDK中的
libcpmt.lib
?链接后将向可执行文件添加多少字节?是否有另一个(第三方)轻量级STL?

这可能是不可能的,至少不可能。C++标准库可能依赖于C标准库来实现某些功能,但是您尝试使用的非版本MSVCR.DLL是非标准的。

只是FYTS::异常不是STL的一部分,它是C++标准库的一部分。但是它在libcpmt.lib中,不是吗?IIRC MSVC中的STL根本不需要链接。话虽如此,你的应用程序可能比你想象的要沉重得多。那
msvcrt
你觉得便宜吗?它在微软的黑名单上,是你不应该依赖的东西。当你触摸它时,你的过程会自动被怀疑。期望Windows启动其应用程序兼容性功能,以确保过时的应用程序仍在现代Windows版本上运行(其中现代=本世纪;MSVCRT可追溯到1998年)@ MsAlter的C++标准库链接到Visual C++编译器,其标志类似于幕后仍然链接到运行库(并添加一些定义)。如果不是这样,您就不能编译或链接不依赖于任何运行时的内容。@PeterT:std::vector(SL中的STL)之类的东西只是标题,这是我的观点。(好吧,你最终需要新的
操作员
,没办法解决这个问题)