有没有办法只将静态链接到STL?

时间:2016-03-01 17:12:35

标签: c++ visual-c++ stl static-linking

我使用Microsoft Visual Studio 2010并使用C ++编写。

我的应用程序应该是轻量级的;因此,我使用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 " (?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是轻量级的吗?

1 个答案:

答案 0 :(得分:0)

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